luogu P1439 模板最长公共子序列
Posted mogeko
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1439 模板最长公共子序列相关的知识,希望对你有一定的参考价值。
(第一道蓝题)
据说是用了hash的思想(?)
总之是先把第一个序列每个数出现的顺序记下来(其实第一个序列的数字不用记),
然后第二个序列的每个数都对照它的顺序,这样只要得到一个升序的序列就行了qwq
如果遇到出现顺序在前面的数,就用二分法找一下它的位置,然后把原来存下来的顺序覆盖掉
#include<cstdio> using namespace std; int f[100005],ans[100005]; int n,sum; int k,l,r,now,mid; int main() { scanf("%d",&n); for(int i = 1; i <= n; i++) { scanf("%d",&k); f[k] = i; } for(int i = 1; i <= n; i++) { scanf("%d",&k); now = f[k]; if(now > ans[sum]) ans[++sum] = now; else { l = 1,r = sum; while(l < r) { mid = (l+r)/2; if (ans[mid]<now)l = mid+1; else r = mid; } ans[l] = now; } } printf("%d",sum); return 0; }
以上是关于luogu P1439 模板最长公共子序列的主要内容,如果未能解决你的问题,请参考以下文章