P1439 排列LCS问题

    • 56通过
    • 220提交
  • 题目提供者yeszy
  • 标签二分动态规划
  • 难度普及+/提高

提交该题 讨论 题解 记录

最新讨论

  • 暂时没有讨论

题目描述

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

输入输出格式

输入格式:

第一行是一个数n,

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

输出格式:

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

输入输出样例

输入样例#1:

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

3

说明

【数据规模】

对于50%的数据,n≤1000

对于100%的数据,n≤100000

题解:

看到10W的规模,大致可以断定此题应该用O(nlogn)的解法,朴素的LCS算法时间复杂度为O(n^2),明显不可行。

首先简化一下问题,假设P1恰好为单调递增的1,2,3,...n,那么很显然答案就是P2的最长上升子序列的长度(想一想,为什么?)

问题是P1并非单调递增的,但我们可以假定它就是1,2,3,...,n,将P1[1]映射到1,P1[2]映射到2,……然后再将P2作相同的变换即可,这样只要求P2的最长上升子序列了。

最长上升子序列是有O(nlogn)算法的,大致过程如下:

建立栈a,每读入一个元素x,若x比栈顶元素大则x进栈,否则在栈中二分找到第一个大于x的元素a[k],并用x替换它,做完以后栈的大小就是序列的最长上升子序列的长度。

AC代码:

(头文件自动忽略就好)

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<string>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define ll long long
#define N 100010
#define inf 1100000000
#define linf 999999999999999LL
#define xx first
#define yy second
typedef pair<int,int> diy;
inline const int read(){
register int x=,f=;
register char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,len;
int a[N],b[N];
int main(){
n=read();
for(int i=;i<=n;i++) a[read()]=i;
for(int i=;i<=n;i++) b[i]=a[read()];
memset(a,,sizeof a);
a[len=]=b[];
for(int i=;i<=n;i++){
if(b[i]>a[len])
a[++len]=b[i];
else
a[lower_bound(a+,a+len+,b[i])-a]=b[i];
}
printf("%d\n",len);
return ;
}

最新文章

  1. MyTtcp 测试网络带宽
  2. bootstrap-table 原来bootstrap还有这么强大的表格插件
  3. SVN常见问题处理
  4. java--关键字和保留字
  5. 【C#】添加鼠标管轮事件
  6. C++经典书目索引及资源下载
  7. (读书笔记)第2章 TCP-IP的工作方式
  8. CSS3 文字与字体相关样式
  9. 使用command line测试网速
  10. hduoj 1002 A + B Problem II
  11. Sqoop异常:Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: org/json/JSONObject
  12. 配置opensips经验总结
  13. Python基础知识摘要
  14. Haskell语言学习笔记(53)Data.Sequence
  15. js中对话框的使用
  16. Android 实现 HttpClient 请求Https
  17. [ES6]import 与export的用法 ,export 与export default 的 区别 以及用法
  18. XAMPP apache443端口被占用
  19. DS05--查找
  20. 《Debian标准教程》摘录2则

热门文章

  1. python中unicode, hex, bin之间的转换
  2. Objective-C-------(1)创建并使用对象
  3. centos7.4下搭建JDK+Tomcat+Nginx+Mysql+redis+Mongodb+maven+Git+Jenkins
  4. Codeforces Round #211 (Div. 2)-D. Renting Bikes,二分!感谢队友出思路!
  5. NYOJ301-递推求值
  6. POJ-2421Constructing Roads,又是最小生成树,和第八届河南省赛的引水工程惊人的相似,并查集与最小生成树的灵活与能用,水过~~~
  7. bzoj3572[Hnoi2014] 世界树 虚树+dp+倍增
  8. SDWebImage实现分析
  9. Eclipse安装插件长时间停留在calculating requirements and dependencies
  10. android修改系统时系统黑屏时不进入休眠状态