Submission #1252916

#TimeUsernameProblemLanguageResultExecution timeMemory
1252916GeforgsCurtains (NOI23_curtains)C++20
100 / 100
776 ms85692 KiB
#include <iostream> #include <iomanip> #include <vector> #include <cmath> #include <algorithm> #include <set> #include <queue> #include <map> #include <unordered_map> #include <stack> #include <bit> #include <bitset> #include <string> #include <cstring> #include <iterator> #include <random> #define ll long long #define ld long double #define inf (ll)(2*1e18) #define sort(a) sort(a.begin(), a.end()) #define reverse(a) reverse(a.begin(), a.end()) #define pb push_back #define endl "\n" using namespace std; void push(ll id, vector<ll>& c, vector<ll>& p){ c[2*id] = max(c[2*id], p[id]); p[2*id] = max(p[2*id], p[id]); c[2*id+1] = max(c[2*id+1], p[id]); p[2*id+1] = max(p[2*id+1], p[id]); p[id] = -1; } void update(ll id, ll l, ll r, ll tl, ll tr, ll val, vector<ll>& c, vector<ll>& p){ if(r < tl or tr < l) return; if(tl <= l and r <= tr){ c[id] = max(c[id], val); p[id] = max(p[id], val); return; } push(id, c, p); ll m=(l+r)/2; update(2*id, l, m, tl, tr, val, c, p); update(2*id+1, m+1, r, tl, tr, val, c, p); c[id] = min(c[2*id], c[2*id+1]); } ll get(ll id, ll l, ll r, ll tl, ll tr, vector<ll>& c, vector<ll>& p){ if(r < tl or tr < l) return inf; if(tl <= l and r <= tr){ return c[id]; } push(id, c, p); ll m=(l+r)/2; return min(get(2*id, l, m, tl, tr, c, p), get(2*id+1, m+1, r, tl, tr, c, p)); } void solve(){ ll n, m, q, i, x, y; cin>>n>>m>>q; vector<vector<ll>> a(n); vector<vector<pair<ll, ll>>> b(n); vector<bool> queries(q); vector<ll> c(4*n, -1); vector<ll> p(4*n, -1); for(i=0;i<m;++i){ cin>>x>>y; --x; --y; a[y].pb(x); } for(i=0;i<q;++i){ cin>>x>>y; --x; --y; b[y].pb({x, i}); } for(i=0;i<n;++i){ for(auto el: a[i]){ update(1, 0, n-1, el, i, el, c, p); } for(auto [el, id]: b[i]){ x = get(1, 0, n-1, el, i, c, p); queries[id] = el <= x; } } for(i=0;i<q;++i){ if(queries[i]){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); srand(time(nullptr)); ll t=1; // cin>>t; for(;t>0;--t){ 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...