175932025-08-06 01:16:52peti1234Vizsgacpp17Hibás válasz 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;
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/14
1Elfogadva1ms316 KiB
2Elfogadva1ms508 KiB
3Hibás válasz1ms316 KiB
4Hibás válasz1ms316 KiB
5Hibás válasz1ms316 KiB
6Elfogadva1ms316 KiB
subtask20/12
1Elfogadva1ms316 KiB
2Futási hiba2ms692 KiB
3Futási hiba3ms820 KiB
4Hibás válasz1ms316 KiB
5Futási hiba4ms1076 KiB
6Hibás válasz2ms316 KiB
7Hibás válasz1ms316 KiB
8Futási hiba4ms936 KiB
subtask313/13
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
3Elfogadva2ms564 KiB
4Elfogadva4ms564 KiB
5Elfogadva4ms800 KiB
6Elfogadva4ms796 KiB
subtask40/23
1Elfogadva6ms820 KiB
2Futási hiba4ms952 KiB
3Futási hiba4ms820 KiB
4Futási hiba4ms1040 KiB
5Futási hiba3ms820 KiB
6Futási hiba3ms1012 KiB
7Futási hiba3ms1012 KiB
8Futási hiba4ms820 KiB
9Futási hiba4ms820 KiB
10Futási hiba3ms820 KiB
subtask50/16
1Elfogadva1ms316 KiB
2Hibás válasz1ms508 KiB
3Hibás válasz1ms508 KiB
4Hibás válasz1ms508 KiB
5Hibás válasz1ms316 KiB
6Hibás válasz1ms316 KiB
7Hibás válasz1ms316 KiB
8Hibás válasz1ms316 KiB
subtask60/22
1Hibás válasz1ms316 KiB
2Hibás válasz1ms748 KiB
3Elfogadva3ms544 KiB
4Hibás válasz3ms316 KiB
5Hibás válasz3ms548 KiB
6Hibás válasz2ms320 KiB
7Hibás válasz2ms316 KiB
8Hibás válasz4ms564 KiB
9Hibás válasz3ms564 KiB
10Hibás válasz4ms684 KiB
11Hibás válasz3ms664 KiB
12Hibás válasz4ms652 KiB