제출 #1188641

#제출 시각아이디문제언어결과실행 시간메모리
1188641user736482Gift Exchange (JOI24_ho_t4)C++20
100 / 100
1251 ms67896 KiB
#pragma GCC optimize("Ofast","unroll-loops","inline") //#pragma GCC target("avx2") #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define pb push_back #define ff first #define ss second #define MOD 1000000009 #define INF 1000000019 #define INFL 1000000000000000099LL #define POT (1<<21) ll a,b,r,c,t,n,m,l,q,k,ak,ans[200007],s; ll moj[500007],chce[500007],pier[500007],ost[500007]; ll sgtree[POT][2]; vector<pair<pair<ll,ll>,ll>>op; vector<pair<ll,ll>>op2; void spych(ll v){ sgtree[v*2][1]=max(sgtree[v*2][1],sgtree[v][1]); sgtree[v*2+1][1]=max(sgtree[v*2+1][1],sgtree[v][1]); sgtree[v*2][0]=max(sgtree[v*2][0],sgtree[v*2][1]); sgtree[v*2+1][0]=max(sgtree[v*2+1][0],sgtree[v*2+1][1]); sgtree[v][1]=-INFL; } ll mx(ll pocz,ll kon,ll l,ll r,ll v){ if(l>kon || r<pocz)return -INFL; if(pocz<=l && kon>=r)return sgtree[v][0]; spych(v); return max(mx(pocz,kon,l,(l+r)/2,v*2),mx(pocz,kon,(l+r)/2+1,r,v*2+1)); } void mn(ll pocz,ll kon,ll l,ll r,ll v,ll val){ if(l>kon || r<pocz)return; if(pocz<=l && kon>=r){sgtree[v][1]=max(sgtree[v][1],val);sgtree[v][0]=max(sgtree[v][0],sgtree[v][1]);return;} spych(v); mn(pocz,kon,l,(l+r)/2,v*2,val); mn(pocz,kon,(l+r)/2+1,r,v*2+1,val); sgtree[v][0]=max(sgtree[v*2][0],sgtree[v*2+1][0]); } int main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; for(ll i=0;i<n;i++){ cin>>moj[i]; } for(ll i=0;i<n;i++){ cin>>chce[i]; } for(ll i=1;i<POT;i++){ sgtree[i][0]=-INFL; sgtree[i][1]=-INFL; } for(ll i=0;i<n;i++){ pier[i]=mx(chce[i],moj[i],1,POT/2,1); mn(chce[i],moj[i],1,POT/2,1,i); } reverse(chce,chce+n); reverse(moj,moj+n); for(ll i=1;i<POT;i++){ sgtree[i][0]=-INFL; sgtree[i][1]=-INFL; } for(ll i=0;i<n;i++){ ost[n-i-1]=n-1-mx(chce[i],moj[i],1,POT/2,1); mn(chce[i],moj[i],1,POT/2,1,i); } for(ll i=1;i<POT;i++){ sgtree[i][0]=-INFL; sgtree[i][1]=-INFL; } cin>>q; for(ll i=0;i<q;i++){ cin>>a>>b; op.pb({{a-1,b-1},i}); } for(ll i=0;i<n;i++)op2.pb({pier[i]+1,i}); sort(op.begin(),op.end()); sort(op2.begin(),op2.end()); reverse(op.begin(),op.end()); reverse(op2.begin(),op2.end()); for(ll i=0;i<n;i++){ while(op2.size() && op2.back().ff<=i){ mn(op2.back().ss+1,op2.back().ss+1,1,POT/2,1,ost[op2.back().ss]); op2.pop_back(); } while(op.size() && op.back().ff.ff==i){ ans[op.back().ss]=(mx(op.back().ff.ff+1,op.back().ff.ss+1,1,POT/2,1)<=op.back().ff.ss); op.pop_back(); } } for(ll i=0;i<q;i++)if(ans[i])cout<<"Yes\n";else cout<<"No\n"; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...