20分求调整
查看原帖
20分求调整
1168588
FASTergood楼主2024/4/28 20:49
#include<iostream>  
#include<algorithm>  
#include<map>  
#include<climits> 
using namespace std;

const int N = 1e5 + 3;

int a[N], b[N], ans;
char x[N], y[N];
int f[N]; 

int main()
{
    map<int, char> q;
    int m, i;
    cin >> m;

    for (i = 1; i <= m; i++)
    {
        cin >> a[i];
        q[a[i]] = 'a' + i - 1; 
        x[i] = q[a[i]];
    }

    fill_n(f, N, INT_MAX); 

    for (i = 1; i <= m; i++)
    {
        cin >> b[i];
        y[i] = q[b[i]];
    }

    ans = 0; 

    for (i = 1; i <= m; i++)
    {
        int l = 1, r = i;
        while (l < r)
        {
            int mid = l + (r - l) / 2;   
            if (y[i] < f[mid])
                r = mid;
            else
                l = mid + 1;
        }

        if (y[i] < f[l]) 
            f[l] = y[i];

        ans = max(ans, l); 
    }

    cout << ans << endl;

    return 0;
}
2024/4/28 20:49
加载中...