分析:
最长公共子序列
转换成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;
}