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...