Submission #253836

#TimeUsernameProblemLanguageResultExecution timeMemory
253836NONAMEKralj (COCI16_kralj)C++14
140 / 140
753 ms53224 KiB
#include <bits/stdc++.h>
#define dbg(x) cerr << #x << " = " << x << "\n"
#define fast_io ios_base::sync_with_stdio(0); cin.tie(0); cout.tie()
using namespace std;
using ll = long long;
using ld = long double;

const int N = int(5e5) + 500;
const int base = int(1e9) + 7;

int n;
int dwarf[N], elf[N], f[N];
vector <int> g[N];

int main() {
    fast_io;

    cin >> n;
    for (int i = 0; i < n; ++i) {
        int x;
        cin >> x;
        --x;

        g[x].push_back(i);
    }
    for (int i = 0; i < n; ++i)
        cin >> dwarf[i];
    for (int i = 0; i < n; ++i)
        cin >> elf[i];

    int p = n - 1;
    for (int i = 0; i < n; ++i) {
        f[i] = f[i - 1] + int(g[i].size()) - 1;

        if (f[i] < f[p])
            p = i;
    }

    //cerr << "\n";
    //for (int i = 0; i < n; ++i, cerr << "\n")
    //for (int j : g[i])
        //cerr << j << " ";
    //cerr << "\n";

    (p += 1) %= n;
    int ans = 0;
    set <int> s;
    s.clear();

    //cerr << p << "\n";

    for (int i = 0; i < n; ++i) {
        for (int j : g[p])
            s.insert(elf[j]);

        auto it = s.upper_bound(dwarf[p]);

        //set <int> se = s;
        //while (!se.empty()) {
            //cerr << *se.begin() << " ";
            //se.erase(se.begin());
        //}
        //cerr << "\n";

        (p += 1) %= n;
        if (it == s.end()) {
            s.erase(s.begin());
            continue;
        }

        s.erase(it);
        ++ans;
    }

    cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...