https://vjudge.net/problem/UVA-10635
LCS在同一个序列中不存在重复元素的情况下可以转换成LIS
#include<bits/stdc++.h> using namespace std; const int P=7*(1e4+5); int n,p,q; int a[P],b[P]; int f[P],g[P]; int ex[P],cnt,ans; int main() { int T; scanf("%d",&T); for(int j=1;j<=T;++j) { scanf("%d%d%d",&n,&p,&q); ++p,++q; for(int i=1;i<P;++i) ex[i]=0; cnt=0; for(int i=1;i<=p;++i) { scanf("%d",&a[i]); ex[a[i]]=++cnt; } for(int i=1;i<=q;++i) { scanf("%d",&b[i]); b[i]=ex[b[i]]; } int qt=0; for(int i=1;i<=q;++i) if(b[i]) b[++qt]=b[i]; q=qt; for(int i=1;i<=q;++i) g[i]=P; for(int i=1;i<=q;++i) { int t=lower_bound(g+1,g+q+1,b[i])-g; f[i]=t; g[f[i]]=b[i]; } ans=0; for(int i=1;i<=q;++i) ans=max(ans,f[i]); printf("Case %d: %d\n",j,ans); } return 0; }