175942025-08-06 01:18:12peti1234Vizsgacpp17Wrong answer 48/100128ms8876 KiB
#include <bits/stdc++.h>
using namespace std;
const int c=5005, c2=100005;
int n, a[c2], b[c2];



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
1Accepted1ms508 KiB
2Accepted1ms332 KiB
3Wrong answer1ms316 KiB
4Wrong answer1ms316 KiB
5Wrong answer1ms316 KiB
6Accepted1ms316 KiB
subtask212/12
1Accepted1ms316 KiB
2Accepted8ms564 KiB
3Accepted71ms7536 KiB
4Accepted18ms1540 KiB
5Accepted93ms7468 KiB
6Accepted20ms1336 KiB
7Accepted24ms1632 KiB
8Accepted78ms5788 KiB
subtask313/13
1Accepted1ms316 KiB
2Accepted2ms316 KiB
3Accepted3ms496 KiB
4Accepted4ms564 KiB
5Accepted4ms564 KiB
6Accepted4ms564 KiB
subtask423/23
1Accepted6ms568 KiB
2Accepted45ms3280 KiB
3Accepted122ms7628 KiB
4Accepted128ms8376 KiB
5Accepted116ms8876 KiB
6Accepted100ms7856 KiB
7Accepted115ms8652 KiB
8Accepted118ms7732 KiB
9Accepted128ms7732 KiB
10Accepted81ms8120 KiB
subtask50/16
1Accepted1ms500 KiB
2Wrong answer1ms508 KiB
3Wrong answer1ms316 KiB
4Wrong answer1ms316 KiB
5Wrong answer1ms316 KiB
6Wrong answer1ms500 KiB
7Wrong answer1ms556 KiB
8Wrong answer1ms316 KiB
subtask60/22
1Wrong answer1ms320 KiB
2Wrong answer1ms316 KiB
3Accepted3ms452 KiB
4Wrong answer3ms316 KiB
5Wrong answer3ms316 KiB
6Wrong answer2ms316 KiB
7Wrong answer2ms316 KiB
8Wrong answer4ms564 KiB
9Wrong answer3ms564 KiB
10Wrong answer3ms568 KiB
11Wrong answer3ms568 KiB
12Wrong answer3ms612 KiB