P1439 【模板】最长公共子序列

题目:

https://www.luogu.com.cn/problem/P1439

离散化+最长公共子序列的优化

离散化的例子:求2314 和3142的最长公共子序列
2  3  1  4

2  3  4

3  1  4  2

2  3  4  1

#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn=1e5+6;
int n;
int a[maxn],b[maxn];
int v[maxn],w[maxn];
int dp[maxn];
int main()
{
    scanf("%d",&n);
  for(int i=1;i<=n;i++)
    {scanf("%d",&a[i]);
    v[a[i]]=i;
    }
     for(int i=1;i<=n;i++)

    {scanf("%d",&b[i]);
      w[i]=v[b[i]];
    }
    int t=0;
    int ans=0;
 for(int i=1;i<=n;i++)
       printf("%d ",w[i]);
  printf("\n");
 for(int i=1;i<=n;i++)
 {
     if(w[i]>dp[ans])
        dp[++ans]=w[i];
     else
        dp[lower_bound(dp+1,dp+ans+1,w[i])-dp]=w[i];
 }
printf("%d\n",ans);

}

 

posted @ 2021-07-27 20:23  废柴废柴少女  阅读(36)  评论(0)    收藏  举报