luogu P1439 模板最长公共子序列

Posted mogeko

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1439 模板最长公共子序列相关的知识,希望对你有一定的参考价值。

题目qwq

(第一道蓝题)

据说是用了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;
}
View Code

 

以上是关于luogu P1439 模板最长公共子序列的主要内容,如果未能解决你的问题,请参考以下文章

最长公共子序列转最大上升子序列(洛谷p1439)

luogu1439 模板最长公共子序列 [动态规划][LIS最长上升子序列][离散化]

P1439 模板最长公共子序列

P1439 模板最长公共子序列 题解

P1439 模板最长公共子序列

P1439 模板最长公共子序列