175942025-08-06 01:18:12peti1234Vizsgacpp17Hibás válasz 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;
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/14
1Elfogadva1ms508 KiB
2Elfogadva1ms332 KiB
3Hibás válasz1ms316 KiB
4Hibás válasz1ms316 KiB
5Hibás válasz1ms316 KiB
6Elfogadva1ms316 KiB
subtask212/12
1Elfogadva1ms316 KiB
2Elfogadva8ms564 KiB
3Elfogadva71ms7536 KiB
4Elfogadva18ms1540 KiB
5Elfogadva93ms7468 KiB
6Elfogadva20ms1336 KiB
7Elfogadva24ms1632 KiB
8Elfogadva78ms5788 KiB
subtask313/13
1Elfogadva1ms316 KiB
2Elfogadva2ms316 KiB
3Elfogadva3ms496 KiB
4Elfogadva4ms564 KiB
5Elfogadva4ms564 KiB
6Elfogadva4ms564 KiB
subtask423/23
1Elfogadva6ms568 KiB
2Elfogadva45ms3280 KiB
3Elfogadva122ms7628 KiB
4Elfogadva128ms8376 KiB
5Elfogadva116ms8876 KiB
6Elfogadva100ms7856 KiB
7Elfogadva115ms8652 KiB
8Elfogadva118ms7732 KiB
9Elfogadva128ms7732 KiB
10Elfogadva81ms8120 KiB
subtask50/16
1Elfogadva1ms500 KiB
2Hibás válasz1ms508 KiB
3Hibás válasz1ms316 KiB
4Hibás válasz1ms316 KiB
5Hibás válasz1ms316 KiB
6Hibás válasz1ms500 KiB
7Hibás válasz1ms556 KiB
8Hibás válasz1ms316 KiB
subtask60/22
1Hibás válasz1ms320 KiB
2Hibás válasz1ms316 KiB
3Elfogadva3ms452 KiB
4Hibás válasz3ms316 KiB
5Hibás válasz3ms316 KiB
6Hibás válasz2ms316 KiB
7Hibás válasz2ms316 KiB
8Hibás válasz4ms564 KiB
9Hibás válasz3ms564 KiB
10Hibás válasz3ms568 KiB
11Hibás válasz3ms568 KiB
12Hibás válasz3ms612 KiB