Submission #1272802

#TimeUsernameProblemLanguageResultExecution timeMemory
1272802ortsacCurtains (NOI23_curtains)C++20
100 / 100
1159 ms60836 KiB
#include <bits/stdc++.h> using namespace std; // ok a seg tem que ter duas operações // 1 -> settar todos os elementos x no range [l, r] para max(x, v) // 2 -> query [l, r] para min value no range #define pii pair<int, int> const int MAXN = 5e5; int lazy[4*MAXN]; int seg[4*MAXN]; const int INF = 0x3f3f3f3f; // its already built, all zeroes!! void unlazy(int node, int l, int r) { if (lazy[node] == 0) return; seg[node] = max(seg[node], lazy[node]); if (l < r) { lazy[2*node] = max(lazy[2*node], lazy[node]); lazy[2*node + 1] = max(lazy[2*node + 1], lazy[node]); } lazy[node] = 0; } void update(int node, int l, int r, int tl, int tr, int x) { unlazy(node, l, r); if ((tr < l) || (r < tl)) return; if ((tl <= l) && (r <= tr)) { lazy[node] = x; unlazy(node, l, r); return; } int m = (l + r)/2; update(2*node, l, m, tl, tr, x); update(2*node + 1, m + 1, r, tl, tr, x); seg[node] = min(seg[2*node], seg[2*node + 1]); } int query(int node, int l, int r, int tl, int tr) { unlazy(node, l, r); if ((tr < l) || (r < tl)) return INF; if ((tl <= l) && (r <= tr)) return seg[node]; int m = (l + r)/2; return min(query(2*node, l, m, tl, tr), query(2*node + 1, m + 1, r, tl, tr)); } int32_t main() { int n, m, q; cin >> n >> m >> q; vector<vector<int>> lForR(n + 1); vector<vector<pii>> queriesForR(n + 1); for (int i = 0; i < m; i++) { int l, r; cin >> l >> r; lForR[r].push_back(l); } for (int i = 0; i < q; i++) { int l, r; cin >> l >> r; queriesForR[r].push_back({l, i}); } vector<int> ans(q); for (int r = 1; r <= n; r++) { for (auto l : lForR[r]) { update(1, 1, n, l, r, l); } for (auto [l, idx] : queriesForR[r]) { int x = query(1, 1, n, l, r); if (x == l) ans[idx] = 1; } } for (auto u : ans) if (u) cout << "YES\n"; else cout << "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...