zoukankan      html  css  js  c++  java
  • 【Luogu】P3402最长公共子序列(LCS->nlognLIS)

      题目链接

      SovietPower 的题解讲的很清楚。Map或Hash映射后用nlogn求出LIS。这里只给出代码。

      

    #include<cstdio>
    #include<cctype>
    #include<map>
    #include<algorithm>
    using namespace std;
    map<int,int> vis;
    
    inline long long read(){
        long long num=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){
            if(ch=='-')    f=-1;
            ch=getchar();
        }
        while(isdigit(ch)){
            num=num*10+ch-'0';
            ch=getchar();
        }
        return num*f;
    }
    
    int a[1000010];
    int b[1000010];
    int sot[1000010];
    int f[1000000];
    int size;
    int cnt;
    int check(int s){
        int l=1,r=cnt;
        while(l<=r){
            int mid=(l+r)>>1;
            if(f[mid]==s)    return mid;
            if(f[mid]<s)    l=mid+1;
            if(f[mid]>s)    r=mid-1;
        }
        return l;
    }
    
    int main(){
        int n=read(),m=read();
        for(int i=1;i<=n;++i)    a[i]=read();
        for(int i=1;i<=m;++i)    b[i]=read();
        for(int i=1;i<=n;++i)    vis[a[i]]=i;
        for(int i=1;i<=m;++i){
            int S=vis[b[i]];
            if(S>0)        b[i]=S;
            else b[i]=0x7fffffff;
        }
        for(int i=1;i<=m;++i){
            if(b[i]==0x7fffffff)    continue;
            int pos=check(b[i]);
            f[pos]=b[i];
            cnt=cnt<pos?pos:cnt;
        }
        printf("%d",cnt);
        return 0;
    }
  • 相关阅读:
    Kotlin学习系列(三)
    获取Android设备标识符
    Kotlin学习系列(二)
    ijkplayer实现IMediaDataSource
    Fresco添加HTTP请求头
    Kotlin学习系列(一)
    完整的Android MVP开发之旅
    Marshmallow权限使用
    APP设计与开发(ui篇)
    下载Android源码
  • 原文地址:https://www.cnblogs.com/cellular-automaton/p/7590342.html
Copyright © 2011-2022 走看看