• UVA


    input

    n,p,q 2<=n<=250 1<=p,q<=n*n

    1 a1 a2 a3 ... ap  1<ai<n*n,ai!=aj

    1 b1 b2 b3 ... bq  1<bi<n*n,bi!=bj

    output

    最长公共子序列个数

    做法:将b数组中的数变为a数组中数的下标,a中不存在的数可以去掉,然后求LIS即可

    #include <cstdio>
    #include <queue>
    #include <cstring>
    #include <iostream>
    #include <cstdlib>
    #include <algorithm>
    #include <vector>
    #include <map>
    #include <set>
    #include <ctime>
    #include <cmath>
    #include <cctype>
    #define MAX 63000
    #define LL long long
    using namespace std;
    int a[MAX],b,len[MAX],idx[MAX],bi[MAX],T,p,q,m,n,cas=1;
    int main()
    {
        freopen("/home/user/桌面/in","r",stdin);
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d%d",&m,&p,&q);
            scanf("%*d");
            for(int i=1;i<=p;i++)
            {
                scanf("%d",&a[i]);
                idx[a[i]]=i;//当a[i]范围很大时可用hash代替
            }
            n=0;
            scanf("%*d");
            for(int i=0;i<q;i++)
            {
                scanf("%d",&b);
                if(a[idx[b]]) bi[++n]=idx[b];
            }
            len[1]=bi[1];
            int l=1;
            for(int i=1;i<=n;i++)//求LIS
            {
                if(bi[i]>len[l]) len[++l]=bi[i];
                else *lower_bound(len+1,len+l+1,bi[i])=bi[i];
            }
            printf("Case %d: %d
    ",cas++,l+1);
        }
        //printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
        return 0;
    }
  • 相关阅读:
    JS client(X,Y)、screen(X,Y)、page(X,Y)的区别
    jS冒泡优化
    CSS盒子模型
    CSS段落对齐方式
    CSS引入方式
    CSS/让一个盒子消失的5中方法
    css垂直居中方法
    【数论】BSGS
    【线段树】树套树 树状数组套主席树
    【树】动态树 LCT
  • 原文地址:https://www.cnblogs.com/cdyboke/p/5012671.html
Copyright © 2020-2023  润新知