您的位置:首页 > 其它

UVa10635 Prince and Princess(LCS)

2017-10-08 09:12 190 查看
题目链接

分析:

最长公共子序列

转换成LIS的nlogn做法

tip

不要忘了using namespace std

外国的网站做的就是好,比某爆炸oj高到不知哪里去了

然而就是在国内不翻墙的话挺慢的

题目比较难找,但是submit要方便得多

//这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

int n,p,q;
int g[70000],a[70000],num[70000];

int doit()
{
int t=1;
g[1]=a[1];
for (int i=2;i<=n;i++)
{
if (a[i]>g[t]) g[++t]=a[i];
int r=lower_bound(g+1,g+1+t,a[i])-g;  //>=的第一个
g[r]=a[i];
}
return t;
}

int main()
{
int TT;
scanf("%d",&TT);
for (int T=1;T<=TT;T++)
{
scanf("%d%d%d",&n,&p,&q);
for (int i=1;i<=p+1;i++)
{
int x;
scanf("%d",&x);
num[x]=i;   //x在a中的位置
}
n=0;
for (int i=1;i<=q+1;i++)
{
int x;
scanf("%d",&x);
if (num[x])   //出现过
a[++n]=num[x];
}
printf("Case %d: %d\n",T,doit());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: