Submission #1203863

#TimeUsernameProblemLanguageResultExecution timeMemory
1203863ofozGift Exchange (JOI24_ho_t4)C++20
10 / 100
2592 ms10944 KiB
#include <bits/stdc++.h>
using namespace std;
#define pi pair<int, int>
#define vi vector<int>
map<int, int> lnk;
bool query(int l, int r, vi& a, vi& b) {
    vi B;
    int mn = INT32_MAX;
    set<int> A;
    for (int i = l; i <= r; i++) {
        B.push_back(b[i]);
        A.insert(a[i]);
        mn = min(mn, a[i]);
    }
    sort(B.rbegin(), B.rend());
    for (int i = 0; i < B.size()-1; i++) {
        int x = B[i];
        bool pres = A.count(lnk[x]);
        A.erase(lnk[x]);
        auto it = A.upper_bound(x);
        // cerr << x;
        if (it == A.end()) return false;
        // cerr << ' ' << *it << endl;
        A.erase(it);
        if (pres) A.insert(lnk[x]);
    }
    if (A.count(mn) && lnk[B.back()] == mn) return false;
    return true;
}
// 12 14 16 17
// 11 13 9 3
void solve() {
    int n;
    cin >> n;
    vector<int> a(n), b(n);
    for (int &x : a) cin >> x;
    for (int &x : b) cin >> x;
    for (int i = 0; i < n; i++) {
        lnk[b[i]] = a[i];
        // cerr << b[i] << ' ' << link[b[i]] << endl;
    }
    int q;
    cin >> q;
    while (q--) {
        int l, r;
        cin >> l >> r;
        l--;
        r--;
        bool res = query(l, r, a, b);
        cout << (res ? "Yes" : "No") << '\n';
    }
}
/*
when is a segment not gift exchangable?
*/
int main() {
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...