Submission #954637

#TimeUsernameProblemLanguageResultExecution timeMemory
954637ono_de206Curtains (NOI23_curtains)C++14
100 / 100
1151 ms92264 KiB
#include<bits/stdc++.h> using namespace std; #define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define in insert #define all(x) x.begin(),x.end() #define pb push_back #define eb emplace_back #define ff first #define ss second #define int long long typedef long long ll; typedef vector<int> vi; typedef set<int> si; typedef multiset<int> msi; typedef pair<int, int> pii; typedef vector<pii> vpii; // typedef pair<int, int> P; template<typename T, typename U> ostream & operator << (ostream &out, const pair<T, U> &c) { out << c.first << ' ' << c.second; return out; } template<typename T> ostream & operator << (ostream &out, vector<T> &v) { const int sz = v.size(); for (int i = 0; i < sz; i++) { if (i) out << ' '; out << v[i]; } return out; } template<typename T> istream & operator >> (istream &in, vector<T> &v) { for (T &x : v) in >> x; return in; } template<typename T, typename U> istream & operator >> (istream &in, pair<T, U> &c) { in >> c.first; in >> c.second; return in; } template<typename T> void mxx(T &a, T b){if(b > a) a = b;} template<typename T> void mnn(T &a, T b){if(b < a) a = b;} const int mxn = 5e5 + 10, MXLOG = 22, mod = 1e9 + 7, P = 1181, D = 1523, N = 2500; const long long inf = 2e18 + 10; int l[mxn], r[mxn], ans[mxn]; vector<int> g[mxn], qr[mxn]; int d[mxn * 4], lz[mxn * 4]; void pro(int i, int l, int r) { if(lz[i] == 0) return; mxx(d[i], lz[i]); if(l < r) { mxx(lz[i * 2], lz[i]); mxx(lz[i * 2 + 1], lz[i]); } lz[i] = 0; } void update(int l, int r, int i, int x, int y, int c) { pro(i, l, r); if(l >= x && r <= y) { mxx(lz[i], c); pro(i, l, r); return; } if(l > y || r < x) return; int m = (l + r) / 2; update(l, m, i * 2, x, y, c); update(m + 1, r, i * 2 + 1, x, y, c); d[i] = min(d[i * 2], d[i * 2 + 1]); } int get(int l, int r, int i, int x, int y) { pro(i, l, r); if(l >= x && r <= y) return d[i]; if(l > y || r < x) return inf; int m = (l + r) / 2; return min(get(l, m, i * 2, x, y), get(m + 1, r, i * 2 + 1, x, y)); } void go() { int n, m, q; cin >> n >> m >> q; for(int i = 1; i <= m; i++) { int x, y; cin >> x >> y; g[y].pb(x); } for(int i = 1; i <= q; i++) { cin >> l[i] >> r[i]; qr[r[i]].pb(i); } for(int i = 1; i <= n; i++) { for(int x : g[i]) { update(1, n, 1, x, i, x); } for(int id : qr[i]) { if(get(1, n, 1, l[id], r[id]) == l[id]) ans[id] = 1; } } for(int i = 1; i <= q; i++) { if(ans[i]) cout << "YES\n"; else cout << "NO\n"; } } signed main() { fast; int t = 1; // cin >> t; while(t--) { go(); } 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...