2013年11月30日 星期六

[UVA] 10635 - Prince and Princess


#include<stdio.h>
#include<string.h>
int A[70000],B[70000],re[70000];
int bi[70000],top;
int main(){
    int t,n,a,b,i,j,l,r,m,C=1;
    scanf("%d",&t);
    while(t--){
        memset(re,-1,sizeof(re));
        scanf("%d%d%d",&n,&a,&b);
        a++,b++;
        for(i=0;i<a;i++){
            scanf("%d",&A[i]);
            re[A[i]]=i+1;
        }
        for(i=0;i<b;i++){
            scanf("%d",&B[i]);
            if(re[B[i]]!=-1)
                B[i]=re[B[i]];
            else B[i]=0;
        }
        for(i=0;i<=n*n;i++)
            bi[i]=int(1e8);
        top=0;
        for(i=0;i<b;i++){
            if(B[i]==0) continue;
            l=0,r=n*n+1;
            while(l+1!=r){
                m=(l+r)/2;
                if(bi[m]<B[i]) l=m;
                else r=m;
            }
            if(l+1>top) top=l+1;
            bi[l+1]=B[i];
        }
        printf("Case %d: %d\n",C++,top);
    }
}

沒有留言:

張貼留言