欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【模板】最长公共子序列

程序员文章站 2022-03-09 19:48:44
...

题目链接

算法又被鸽鸽鸽了。。。

Code:

#include<bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define rep2(i,j,k) for(int i=j;i>=k;i--)
using namespace std;
template<typename T> void chkmin(T &x,T y){x=x<y?x:y;}
template<typename T> void chkmax(T &x,T y){x=x>y?x:y;}
template<typename T> void read(T &x){scanf("%d",&x);}
template<typename T> void write(T x){printf("%d\n",x);}
int co[2][100010];int no[100010];
int dp[100010];int fdp[100010];

int main(){
	int n;read(n);
	rep(i,1,n){read(co[0][i]);}
	rep(i,1,n){int x;read(x);co[1][x]=i;}
	rep(i,1,n){no[i]=co[1][co[0][i]];}
	
	memset(fdp,0x3f,sizeof(fdp));
	dp[1]=1;int len=1;fdp[1]=no[1];int ans=1;
	rep(i,2,n){
		dp[i]=1;
		rep2(j,len,1){
			if(fdp[j]<no[i]){
				dp[i]=j+1;break;
			}
		}
		chkmin(fdp[dp[i]],no[i]);chkmax(len,dp[i]);
		chkmax(ans,dp[i]);
	}
	write(ans);
	return 0;
}

 

相关标签: 模板