哈理工 1598 最长公共n*logn

来源:互联网 发布:虎贲万岁 知乎 编辑:程序博客网 时间:2024/06/09 14:53
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>#define ll long long#define inf 1000000000using 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);    }}


0 0
原创粉丝点击