Submission #1127912

#TimeUsernameProblemLanguageResultExecution timeMemory
1127912pemguimnCurtains (NOI23_curtains)C++17
100 / 100
929 ms108204 KiB
#include <bits/stdc++.h> #define pii pair<int, int> using namespace std; const int N = 1e6 + 5; struct node{ int x, lz; node(){ x = lz = -1; } }; node unite(const node &x, const node &y){ node ans; ans.x = min(x.x, y.x); return ans; } struct SegmentTree{ vector<node> seg; int n; void init(int _n){ n = _n; seg.resize(4 * n + 5); } void apply(int id, int x){ seg[id].x = max(seg[id].x, x); seg[id].lz = max(seg[id].lz, x); } void down(int id){ int &t = seg[id].lz; apply(id * 2, t), apply(id * 2 + 1, t); t = -1; } void upd(int id, int tl, int tr, int l, int r, int x){ if(r < tl || tr < l) return; if(l <= tl && tr <= r){ apply(id, x); return; } int mid = (tl + tr) / 2; down(id); upd(id * 2, tl, mid, l, r, x), upd(id * 2 + 1, mid + 1, tr, l, r, x); seg[id] = unite(seg[id * 2], seg[id * 2 + 1]); } int query(int id, int tl, int tr, int l, int r){ if(r < tl || tr < l) return N; if(l <= tl && tr <= r) return seg[id].x; int mid = (tl + tr) / 2; down(id); return min(query(id * 2, tl, mid, l, r), query(id * 2 + 1, mid + 1, tr, l, r)); } }; int n, m, q, l[N], r[N], s[N], e[N]; bool ans[N]; vector<int> upd[N]; vector<pii> qq[N]; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); // #define task "noicurtains" // if(fopen(task".inp", "r")){ // freopen(task".inp", "r", stdin); // freopen(task".out", "w", stdout); // } cin >> n >> m >> q; for(int i = 1; i <= m; i++){ cin >> l[i] >> r[i]; upd[r[i]].push_back(l[i]); } for(int i = 1; i <= q; i++){ cin >> s[i] >> e[i]; qq[e[i]].push_back({s[i], i}); } SegmentTree a; a.init(n + 1); for(int i = 1; i <= n; i++){ for(int x : upd[i]) a.upd(1, 1, n, x, i, x); for(pii qu : qq[i]){ if(a.query(1, 1, n, qu.first, i) == qu.first) ans[qu.second] = 1; } } for(int i = 1; i <= q; i++) cout << (ans[i] ? "YES" : "NO") << "\n"; 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...