zoukankan      html  css  js  c++  java
  • [题解]洛谷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;
    }
    本篇文章为SHINE_GEEK原创,转载请注明来源!
    written_by:SHINE_GEEK

    -------------------------------------
    签名:自己选的路,跪着也要走完;理想的实现,需要不懈奋斗!
    -------------------------------------
  • 相关阅读:
    jQuery-1.样式篇---属性与样式
    jQuery-1.样式篇---选择器
    jQuery-1.样式篇
    随机数
    UIButton
    UILabel
    webView
    气泡聊天
    下拉和上拉刷新
    LimitDemo
  • 原文地址:https://www.cnblogs.com/sjrb/p/10347074.html
Copyright © 2011-2022 走看看