zoukankan      html  css  js  c++  java
  • LIS与LCS的nlogn解法

    LIS(nlogn)

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=1e5+5;
    int a[maxn];
    int n;
    int lis[maxn];
    int len=1;
    int find(int x){
        int l=1,r=len,m;
        while(l<r){
            m=l+(r-l)/2;
            if(lis[m]>=a[x]){//这里若去掉等号即为 非严格递增序列 
                r=m;
            } 
            else{
                l=m+1;
            }
        }
        return l;
    }
    int main(void){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        lis[1]=a[1];
        for(int i=2;i<=n;i++){
            if(a[i]>lis[len]){
                lis[++len]=a[i];
            }
            else{
                int pos=find(i);
                lis[pos]=a[i];
            }
        }
        printf("%d",len);
        return 0;
    }

    LCS(nlogn)

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    const int maxn=1e6+5;
    int n,len=0;
    int lis[maxn];
    int a[maxn];
    int b[maxn];
    int loc[maxn];
    int find(int x){
        int l=1,r=len,m;
        while(l<r){
            m=l+(r-l)/2;
            //if(lis[m]>=b[x]){//智障错误,找了那么久。。 
            if(lis[m]>=x){
                r=m;
            }
            else  l=m+1;
        }
        return l;
    }
    int main(void){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<=n;i++){
            scanf("%d",&b[i]);
            loc[b[i]]=i;
        }
        for(int i=1;i<=n;i++){
            b[i]=loc[a[i]];
        }
    //    for(int i=1;i<=n;i++)printf("%d",b[i]) ;// 
    //    printf("
    ");
        if(n!=0)lis[++len]=b[1];
        for(int i=2;i<=n;i++){
            if(b[i]>lis[len]){
                lis[++len]=b[i];
            }
            else{
                int pos=find(b[i]);
                lis[pos]=b[i];
            }
        }
        printf("%d",len);
        return 0;
    }
  • 相关阅读:
    大数据用户画像方法与实践(干货 转帖)
    前端学习之路
    MySQL学习记录
    Linux 运维之路
    Python学习之路
    NgRx/Store 4 + Angular 5使用教程
    CSS实现各种形状
    CSS3实现背景透明,文字不透明
    CSS实现网页背景图片自适应全屏
    使用Restify+superagent做数据转发
  • 原文地址:https://www.cnblogs.com/yzm10/p/9502347.html
Copyright © 2011-2022 走看看