[題解]洛谷P1439 【模板】最長公共子序列
阿新 • • 發佈:2019-02-02
序列 printf %d span pac namespace int turn esp
原題
原題
思路
將第一個序列依次從左到右標號,然後映射到第二個序列中
因為第一個序列標號只上升的所以問題就轉化為序列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; }
[題解]洛谷P1439 【模板】最長公共子序列