最长公共子序列,洛谷之提高历练地,提高模板-nlogn数据结构

原创 2018年04月17日 10:57:14

正题

      让你用Dp做,FFT了吧。(Fast,Fast,TLE).

      n的平方明显是不行的。我们来尝试一下新的方法,我们把第一个序列从1到n来编号

int x;
scanf("%d",&x);
where[x]=i;

我们把他们的值所对应的编号记录下来。

 接着,我们把另外一个序列的值改成所对应的编号

s[i]=where[x];

我们现在就可以直接搞一便最长上升子序列即为答案,为什么???因为第一个序列式按编号递增的,而第二个的序列直接对应到第一个序列的每个值,相当于就是按顺序选择。

二分啊!logn 单调上升队列op

#include<cstdio>
#include<cstdlib>
#include<cstring>

int n;
int len=0;
int where[100010];
int s[100010]; 
int op[100010];
int max=0;

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		where[x]=i;
	}
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		s[i]=where[x];
	}
	len=max=1;
	op[1]=s[1];
	for(int i=2;i<=n;i++){
		int x=s[i];
		int l=1,r=len;
		int ans=0; 
		if(x>op[len]) op[++len]=x;
		else
			while(l<=r){
				int mid=(l+r)/2;
				if(x<op[mid]) {
					r=mid-1; 
					ans=mid;
				}
				else l=mid+1;
			}
		if(op[ans]>x) op[ans]=x;
	}
	printf("%d",len);
}



版权声明: https://blog.csdn.net/Deep_Kevin/article/details/79971590

2002年考研政治大纲各部分知识点变化情况

2002年考研政治大纲各部分知识点变化情况2001年05月29日16:00:40 中国教育热线   本文为2002年政治考试大纲修订说明部分   2002年全国硕士研究生入学考试政治理论考试大纲在20...
  • stanely
  • stanely
  • 2001-06-04 21:30:00
  • 540

SuperGCD,洛谷之提高历练地,数论(3-5)

前话      数论就是研究整数的理论。包括公约公倍数、质数、欧拉定理和同余方程等。正文       其实数论不止那么简单正文      第一题:SuperGCD      这一题就是很烦的代码加很烦...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-07 17:19:43
  • 13

[SDOI2009]E&D,洛谷之提高历练地,博弈论(3-6)

正题      第四题:[SDOI2009]E&amp;amp;D      这题不是如此的简单,因为它要涉及到找规律和Sg函数。      首先的,我们可以打一个表来观察之间的关系。      Sg...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-08 13:48:45
  • 13

最长公共子序列的NlogN解法

最长公共子序列 的 nlogn 的算法本质是 将该问题转化成 最长增序列(LIS),因为 LIS 可以用nlogn实现,所以求LCS的时间复杂度降低为 nlogn。 1. 转化:将LCS问题转化...
  • guogaoan
  • guogaoan
  • 2014-08-13 17:22:06
  • 935

种树,洛谷之提高历练地,堆

正题      第五题:种树      这题看上去很烦,实际上也很烦。。。      那么我们第一个想到的就是用堆维护最大值。      我们把多步拆成多个一步来求解,当k=1的时候,那么答案就是最大...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-16 11:42:57
  • 4

[POI2008]BLO-Blockade,洛谷之提高历练地,强连通分量

正题      [POI2008]BLO-Blockade      这一题很神奇啊~      我们来想想两个点不能连通和强连通有什么关系。      那么其实很明显,如果当前点所遍历到的子节点不能...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-22 14:24:13
  • 6

食物链,洛谷之提高历练地,并查集

正文      第二题:食物链      这题经典啊!!!我们可以想象,如果我们可以搞一个并查集来维护x的同伙,天敌和食物就好了。      我们想到了开三倍空间来维护x的天敌,同伙和食物。     ...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-15 15:57:03
  • 15

最长公共子序列nlogn算法

求两个序列的最大公共子序列(LCS),普遍的动态规划算法时间复杂度为O(n^2),在两个序列的长度很长的时候运行时间过长。可以转化为最长上升子序列(LIS)来求,时间复杂度可以优化到nlogn。1.首...
  • zhijianshafeiyang
  • zhijianshafeiyang
  • 2015-04-14 00:04:50
  • 1759

线段树(该段求段+lazy)优化,洛谷之提高历练地,提高模板-nlogn数据结构

正文      这个东西挺简单的吧,线段树就不细讲了,主要讲讲lazy。      懒嘛~      如果当前覆盖整个区间,那么我们就用lazy把它那个值记录下来,然后,如果不是完全覆盖当前区间,那么...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-17 10:47:46
  • 28

序列合并,洛谷之提高历练地,堆

正文      第三题:序列合并      我们很容易就可以得到一个结论,将A,B从小到大排序后,可以满足A1+B1&amp;lt;=A1+B2&amp;lt;=A1+B3...      我们也可以...
  • Deep_Kevin
  • Deep_Kevin
  • 2018-04-16 11:18:09
  • 21
收藏助手
不良信息举报
您举报文章:最长公共子序列,洛谷之提高历练地,提高模板-nlogn数据结构
举报原因:
原因补充:

(最多只允许输入30个字)