码迷,mamicode.com
首页 > 其他好文 > 详细

luogu P1439 【模板】最长公共子序列

时间:2018-10-27 01:30:51      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:alt   都对   open   turn   www.   bsp   覆盖   一个   sed   

题目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 【模板】最长公共子序列

标签:alt   都对   open   turn   www.   bsp   覆盖   一个   sed   

原文地址:https://www.cnblogs.com/mogeko/p/9859379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!