Submission #1139794

#TimeUsernameProblemLanguageResultExecution timeMemory
1139794VMaksimoski008Gift Exchange (JOI24_ho_t4)C++20
50 / 100
2591 ms4712 KiB
#include <bits/stdc++.h>
#define ar array
//#define int long long

using namespace std;

using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int mod = 1e9 + 7;
const ll inf = 1e18;
const int maxn = 1e5 + 5;

struct union_find {
    int n;
    vector<int> par, size;
    union_find(int _n) : n(_n), par(n+1), size(n+1, 1) {
        for(int i=1; i<=n; i++) par[i] = i;
    }

    int find(int u) {
        if(u == par[u]) return u;
        return par[u] = find(par[u]);
    }

    void uni(int a, int b) {
        a = find(a); b = find(b);
        if(a == b) return ;
        if(size[a] < size[b]) swap(a, b);
        size[a] += size[b];
        par[b] = a;
    }

    int get_size(int u) {
        return size[find(u)];
    }
};

signed main() {
    ios_base::sync_with_stdio(false);
    cout.tie(0); cin.tie(0);

    int n, q; cin >> n;
    vector<int> a(n+1), b(n+1);
    for(int i=1; i<=n; i++) cin >> a[i];
    for(int i=1; i<=n; i++) cin >> b[i];

    cin >> q;
    while(q--) {
        int l, r, ok=1; cin >> l >> r;

        union_find dsu(n);
        vector<ar<int, 3> > vec;
        for(int i=l; i<=r; i++) vec.push_back({ b[i], a[i], i });
        sort(vec.begin(), vec.end());

        int best = vec[0][2];
        for(int i=1; i<vec.size(); i++) {
            if(a[best] >= vec[i][0]) dsu.uni(best, vec[i][2]);
            if(a[best] < vec[i][1]) best = vec[i][2];
        }

        

        for(int i=l; i<=r; i++)
            if(dsu.get_size(i) == 1) ok = 0;
        cout << (ok ? "Yes" : "No") << '\n';
    }
}
#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...