[题解]洛谷P1439 【模板】最长公共子序列
作者:互联网
原题
思路
将第一个序列依次从左到右标号,然后映射到第二个序列中
因为第一个序列标号只上升的所以问题就转化为序列2标号后的最长上升子序列
代码
#include<cstdio> #include<algorithm> using namespace std; const int MAXN=100010; int n,a[MAXN],b[MAXN]; int c[MAXN]; int stack[MAXN]; int ans=1; int qwq[MAXN]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); qwq[a[i]]=i; } for(int i=1;i<=n;i++){ scanf("%d",&b[i]); c[i]=qwq[b[i]]; } stack[1]=c[1]; for(int i=2;i<=n;i++){ if(stack[ans]<c[i]){ stack[++ans]=c[i]; }else{ stack[lower_bound(stack+1,stack+ans+1,c[i])-stack]=c[i]; } } printf("%d",ans); return 0; }
标签:标号,洛谷,原题,int,题解,MAXN,序列,include,P1439 来源: https://www.cnblogs.com/sjrb/p/10347074.html