Submission #1181837

#TimeUsernameProblemLanguageResultExecution timeMemory
1181837asli_bgCurtains (NOI23_curtains)C++20
20 / 100
1138 ms68308 KiB
#include<bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; #define int long long typedef pair<int,int> pii; typedef vector<pii> vii; typedef vector<int> vi; typedef vector<bool> vb; #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define all(x) x.begin(),x.end() #define fi first #define se second #define pb push_back #define sp <<" "<< #define cont(x) for(auto el:x) cout<<el<<' ';cout<<endl; #define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl; #define DEBUG(x) cout<<#x sp x<<endl; #define carp(x,y) ((x%MOD)*(y%MOD))%MOD #define topla(x,y) ((x%MOD)+(y%MOD))%MOD #define mid (l+r)/2 const int MAXN=1e6+5; const int MOD=1e9+7; const int INF=1e18; int n,m,q; int sol[MAXN], sag[MAXN]; vi tut[MAXN]; bool ans[MAXN]; int t[4*MAXN]; int lazy[4*MAXN]; void push(int nd,int l,int r){ if(lazy[nd]==0 or l==r) return; lazy[nd*2]+=lazy[nd]; lazy[nd*2+1]+=lazy[nd]; t[nd*2]+=lazy[nd]; t[nd*2+1]+=lazy[nd]; lazy[nd]=0; } void update(int ql,int qr,int val,int nd=1,int l=1,int r=n){ if(l>r or l>qr or r<ql) return; push(nd,l,r); if(ql<=l and r<=qr){ t[nd]+=val; lazy[nd]+=val; return; } update(ql,qr,val,nd*2,l,mid); update(ql,qr,val,nd*2+1,mid+1,r); t[nd]=min(t[nd*2],t[nd*2+1]); } int query(int ql,int qr,int nd=1,int l=1,int r=n){ if(l>r or l>qr or r<ql) return INF; push(nd,l,r); if(ql<=l and r<=qr) return t[nd]; auto s1=query(ql,qr,nd*2,l,mid); auto s2=query(ql,qr,nd*2+1,mid+1,r); return min(s1,s2); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>m>>q; FORE(i,1,m+1){ cin>>sol[i]>>sag[i]; update(sol[i],sag[i],1); tut[sag[i]].pb(i); } vii vec; FORE(i,1,q+1){ int s,e; cin>>s>>e; vec.pb({e,i}); } sort(all(vec)); reverse(all(vec)); int pt=n; FOR(i,vec.size()){ int e=vec[i].fi; int ind=vec[i].se; while(pt>e){ for(auto el:tut[pt]){ update(sol[el],sag[el],-1); } pt--; } if(query(1,e)>0) ans[ind]=true; else ans[ind]=false; } FORE(i,1,q+1) cout<<(ans[i]?"YES":"NO")<<endl; }
#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...