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

离散化。。。
惊奇地发现它变成了求LIS
LIS不是n^2吗?
神奇的操作
上代码

#include<bits/stdc++.h>
using namespace std;
int n,s1[100010],s2[100010],s[100010],f[100010],now;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>s1[i];
        s[s1[i]]=i;
    }
    for(int i=1;i<=n;i++)
    {
        cin>>s2[i];
    }
    for(int i=1;i<=n;i++)
    {
        if(s[s2[i]]>f[now])
        {
            f[++now]=s[s2[i]];
        }
        else
        {
            int k=lower_bound(f+1,f+now+1,s[s2[i]])-f;
            f[k]=s[s2[i]];
        }
    }
    cout<<now;
}
posted @ 2019-01-03 18:49  G_A_TS  阅读(565)  评论(0编辑  收藏  举报