洛谷 P1439 排列LCS问题

来源:互联网 发布:java socket编程书籍 编辑:程序博客网 时间:2024/06/15 19:11

题目描述

给出1-n的两个排列P1和P2,求它们的最长公共子序列。

输入输出格式

输入格式:

第一行是一个数n,

接下来两行,每行为n个数,为自然数1-n的一个排列。

输出格式:

一个数,即最长公共子序列的长度

输入输出样例

输入样例#1:
5 3 2 1 4 51 2 3 4 5
输出样例#1:
3

说明

【数据规模】

对于50%的数据,n≤1000

对于100%的数据,n≤100000

题目描述

给出1-n的两个排列P1和P2,求它们的最长公共子序列。

输入输出格式

输入格式:

第一行是一个数n,

接下来两行,每行为n个数,为自然数1-n的一个排列。

输出格式:

一个数,即最长公共子序列的长度

输入输出样例

输入样例#1:
5 3 2 1 4 51 2 3 4 5
输出样例#1:
3

说明

【数据规模】

对于50%的数据,n≤1000

对于100%的数据,n≤100000


把一个映射到另一个上,求lis。

#include<algorithm>#include<iostream>#include<cstdio>using namespace std;const int N=100005;int n,m,mp[N],d[N],a[N];int main(){scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);mp[x]=i;}for(int i=1;i<=n;i++){int x;scanf("%d",&x);a[i]=mp[x];}for(int i=1;i<=n;i++)if(d[m]<a[i])d[++m]=a[i];elsed[lower_bound(d+1,d+m+1,a[i])-d]=a[i];printf("%d\n",m);return 0;}

0 0
原创粉丝点击