#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #define ll long long #define inf 1000000000 using namespace std; int pos[10001],g[10001]; int a[10001],b[10001]; int main() { int t ; scanf("%d",&t); while(t--) { int p,q; scanf("%d%d",&q,&p); for(int i=0;i<q;i++) pos[i]=inf; for(int i=0; i<q; i++) scanf("%d",&a[i]); for(int i=0; i<p; i++) { scanf("%d",&b[i]); pos[b[i]]=i; } int sum=0; for(int i=0; i<q; i++) a[i]=pos[a[i]]; g[0]=a[0]; int len=0; for(int i=1; i<q; i++) { if(a[i]==inf) continue; if(a[i]>g[len]) { //printf("ok"); len++; g[len]=a[i]; } else { int k=lower_bound(g,g+len,a[i])-g; g[k]=a[i]; } } printf("%d\n",len+1); } }
哈理工 1598 最长公共n*logn
最新推荐文章于 2019-03-13 20:25:19 发布