175932025-08-06 01:16:52peti1234Vizsgacpp17Wrong answer 13/1006ms1076 KiB
#include <bits/stdc++.h>
using namespace std;
const int c=5005, c2=100005;
int n, a[c], b[c];



int  kov[c2], el[c2], lis[c2], si;
map<int, int> inv;
int main() {
    ios_base::sync_with_stdio(false);
    cin >> n;
    if (true) {
        bool kul=1;
        for (int i=1; i<=n; i++) {
            cin >> a[i];
            if (!inv[a[i]]) inv[a[i]]=i;
            else kul=0;
        }
        for (int i=1; i<=n; i++) {
            cin >> b[i];
        }
        if (!kul) {
            for (int i=1; i<=n; i++) {
                if (a[i]==b[i]) {
                    for (int j=i; j>1; j--) {
                        if (a[j]>a[j-1]) {
                            a[j-1]=a[j];
                        } else {
                            break;
                        }
                    }
                    if (i<n) a[i+1]=max(a[i], a[i+1]);
                }
            }
            int cnt=0;
            for (int i=1; i<=n; i++) {
                if (a[i]==b[i]) {
                    cnt++;
                }
            }
            cout << cnt << "\n";
            return 0;
        }

        vector<int> sor;
        sor.push_back(0);
        for (int i=1; i<=n; i++) {
            while (sor.back()>0 && a[i]>a[sor.back()]) {
                kov[sor.back()]=i;
                sor.pop_back();
            }
            el[i]=sor.back();
            sor.push_back(i);
        }
        while (sor.back()>0) {
            kov[sor.back()]=n+1;
            sor.pop_back();
        }

        for (int i=1; i<=n; i++) {
            int s=inv[b[i]];
            if (s && el[s]<i && i<kov[s]) {
                int lo=0, hi=si+1, mid;
                while (hi-lo>1) {
                    mid=(hi+lo)/2;
                    if (lis[mid]>s) {
                        hi=mid;
                    } else {
                        lo=mid;
                    }
                }
                si=max(si, hi);
                lis[hi]=s;
            }
        }
        cout << si << "\n";
        return 0;
    }
}
SubtaskSumTestVerdictTimeMemory
subtask10/14
1Accepted1ms316 KiB
2Accepted1ms508 KiB
3Wrong answer1ms316 KiB
4Wrong answer1ms316 KiB
5Wrong answer1ms316 KiB
6Accepted1ms316 KiB
subtask20/12
1Accepted1ms316 KiB
2Runtime error2ms692 KiB
3Runtime error3ms820 KiB
4Wrong answer1ms316 KiB
5Runtime error4ms1076 KiB
6Wrong answer2ms316 KiB
7Wrong answer1ms316 KiB
8Runtime error4ms936 KiB
subtask313/13
1Accepted1ms316 KiB
2Accepted1ms316 KiB
3Accepted2ms564 KiB
4Accepted4ms564 KiB
5Accepted4ms800 KiB
6Accepted4ms796 KiB
subtask40/23
1Accepted6ms820 KiB
2Runtime error4ms952 KiB
3Runtime error4ms820 KiB
4Runtime error4ms1040 KiB
5Runtime error3ms820 KiB
6Runtime error3ms1012 KiB
7Runtime error3ms1012 KiB
8Runtime error4ms820 KiB
9Runtime error4ms820 KiB
10Runtime error3ms820 KiB
subtask50/16
1Accepted1ms316 KiB
2Wrong answer1ms508 KiB
3Wrong answer1ms508 KiB
4Wrong answer1ms508 KiB
5Wrong answer1ms316 KiB
6Wrong answer1ms316 KiB
7Wrong answer1ms316 KiB
8Wrong answer1ms316 KiB
subtask60/22
1Wrong answer1ms316 KiB
2Wrong answer1ms748 KiB
3Accepted3ms544 KiB
4Wrong answer3ms316 KiB
5Wrong answer3ms548 KiB
6Wrong answer2ms320 KiB
7Wrong answer2ms316 KiB
8Wrong answer4ms564 KiB
9Wrong answer3ms564 KiB
10Wrong answer4ms684 KiB
11Wrong answer3ms664 KiB
12Wrong answer4ms652 KiB