30分求调

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

Luka__Modric @ 2024-05-03 19:11:09

#include<bits/stdc++.h>
using namespace std;
int n,dp[100010];
struct node{
    int p1,p2;
}p[100010];
bool cmp(node x,node y){
    return x.p1<y.p1;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>p[i].p1;
    for(int i=1;i<=n;i++)
        cin>>p[i].p2,dp[i]=1e9+10;
    sort(p+1,p+n+1,cmp);
    dp[0]=-1e9-10;
    for(int j=1;j<=n;j++){
        int i=lower_bound(dp+1,dp+j+1,p[j].p2)-dp;
        dp[i]=p[j].p2;
    }
    for(int i=n;i>=1;i--){
        if(dp[i]!=1e9+10){
            cout<<i;
            return 0;
        }
    }
}

|