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;
    }
  • 相关阅读:
    uniApp 实现微信小程序和app视频播放flv格式视频监控
    uniapp 给子组件传值不及时显示
    uni-app 中$refs 在app中无法使用
    使用甘特图
    背景图片加蒙版,里面内容不受影响
    MyBatis 多对一操作
    在Maven项目中使用lombok
    MyBatis使用分页
    Log4j打印日志
    paramiko 下载文件
  • 原文地址:https://www.cnblogs.com/yzm10/p/9502347.html
Copyright © 2011-2022 走看看