• 【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;
    }
  • 相关阅读:
    探寻京东云核心竞争力的源泉
    在线公开课 | 教你如何自行搭建一个威胁感知大脑?
    推迟学习系统调用
    linux中未实现的系统调用
    man(2) V
    man(2) W
    图像叠加
    man(2) readv writev
    qt 视频播放
    ffmpeg参数
  • 原文地址:https://www.cnblogs.com/cellular-automaton/p/7590342.html
Copyright © 2020-2023  润新知