UVa10635 Prince ans Princess(LCS)

题目链接

分析:
最长公共子序列
转换成LIS的nlogn做法

tip

不要忘了using namespace std

外国的网站做的就是好,比某爆炸oj高到不知哪里去了
然而就是在国内不FQ的话挺慢的
题目比较难找,但是submit要方便得多

//这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

int n,p,q;
int g[70000],a[70000],num[70000];

int doit()
{
    int t=1;
    g[1]=a[1];
    for (int i=2;i<=n;i++)
    {
        if (a[i]>g[t]) g[++t]=a[i];
        int r=lower_bound(g+1,g+1+t,a[i])-g;  //>=的第一个 
        g[r]=a[i];
    }
    return t;
}

int main()
{
    int TT;
    scanf("%d",&TT);
    for (int T=1;T<=TT;T++)
    {
        scanf("%d%d%d",&n,&p,&q);
        for (int i=1;i<=p+1;i++)
        {
            int x;
            scanf("%d",&x);
            num[x]=i;   //x在a中的位置 
        }
        n=0;
        for (int i=1;i<=q+1;i++)
        {
            int x;
            scanf("%d",&x);
            if (num[x])   //出现过 
                a[++n]=num[x];
        }
        printf("Case %d: %d
",T,doit());
    }
    return 0;
}
原文地址:https://www.cnblogs.com/wutongtong3117/p/7673040.html