Submission #1272693

#TimeUsernameProblemLanguageResultExecution timeMemory
1272693goulthenCurtains (NOI23_curtains)C++20
100 / 100
521 ms137792 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ll long long #define rep(i,a,b) for (int i = a; i <= b; i++) #define per(i,a,b) for (int i = a; i >= b; i--) #define fi first #define se second #define pii pair<int,int> #define pb push_back #define all(v) (v).begin(), (v).end() const int MAXN = 5e5+10; const int INF = 1e18 + 5; const int MOD = 1e9+7; vector<int> tl[MAXN], tr[MAXN]; int closest[MAXN]; struct query {int l,r,id;}; int ans[MAXN]; void DC(int s, int e, vector<query> qrs) { if (qrs.empty()) return; if (s==e) { bool ok = 0; for (int x : tr[s]) if (x==e) ok = 1; for (query q : qrs) ans[q.id] = ok; return; } int m = (s+e)/2; vector<pii> stk; per(i,m,s) { int br = -1, ar = INF; for (int r : tr[i]) { if (r > e) continue; if (r>=m) ar=min(ar,r); else br = max(br, r); } closest[i] = INF; if(ar!=INF) closest[i] = min(closest[i],ar); while (!stk.empty()) { pii t = stk.back(); if(t.fi <= br +1 || closest[i] <= t.se) { stk.pop_back(); closest[i] = min(closest[i], t.se); } else break; } stk.push_back({i,closest[i]}); } stk.clear(); rep(i,m+1,e) { int bl = INF, al = -1; for (int l : tl[i]) { if (l < s) continue; if (l <= m+1) al = max(al,l); else bl = min(bl,l); } closest[i] = -1; if(al <= m+1) closest[i] = max(closest[i], al); while (!stk.empty()) { pii t = stk.back(); if (bl-1 <= t.fi || closest[i] >= t.se) { stk.pop_back(); closest[i] = max(closest[i], t.se); } else break; } stk.push_back({i,closest[i]}); } vector<query> lq, rq; for (query q : qrs) { if (q.r <= m) lq.push_back(q); else if(q.l>m) rq.push_back(q); else { ans[q.id] = (closest[q.l] <= q.r && closest[q.r] >= q.l); } } DC(s,m,lq); DC(m+1,e, rq); } void solve() { int n,m,q;cin >> n >> m >> q; rep(i,1,m) { int l,r;cin >> l >> r; tr[l].pb(r); tl[r].pb(l); } vector<query> qrs; rep(i,1,q) { int l,r;cin >> l >> r; qrs.push_back({l,r,i}); } DC(1,n,qrs); rep(i,1,q) { cout << (ans[i] ? "YES\n":"NO\n"); } } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(nullptr); int tt = 1; //cin >> tt; while (tt--) 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...