1 条题解

  • 0
    @ 2025-12-1 21:16:12
    // 二分+贪心 O(nlogn)
    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=100010;
    int n,x,id[N],p[N],len;
    
    int main(){
      scanf("%d",&n);
      for(int i=1;i<=n;i++) scanf("%d",&x),id[x]=i;
      
      memset(p,0x3f,sizeof p);
      for(int i=1;i<=n;i++){
        scanf("%d",&x);
        *lower_bound(p+1,p+n+1,id[x])=id[x]; //用x的出现次序替换队列p中元素
      }
      len=lower_bound(p+1,p+n+1,p[0])-p-1; //第一个 0x3f 左边是公共子序列
      printf("%d",len);
    }
    
    • 1

    E5_2 两个排列的最长公共子序列

    信息

    ID
    1929
    时间
    1000ms
    内存
    128MiB
    难度
    8
    标签
    递交数
    166
    已通过
    26
    上传者