제출 #1150676

#제출 시각아이디문제언어결과실행 시간메모리
1150676imarnGift Exchange (JOI24_ho_t4)C++20
100 / 100
1012 ms144048 KiB
#include<bits/stdc++.h> #pragma GCC optimize("O3") #pragma GCC target("avx2") #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define plx pair<ll,int> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define vi vector<int> #define vvi vector<vi> #define pp pair<ll,int> #define ub(x,i) upper_bound(all(x),i)-x.begin() #define lb(x,i) lower_bound(all(x),i)-x.begin() #define t3 tuple<int,int,int> #define sz(x) (ll)x.size() using namespace std; const int mxn=1e6+5; int a[mxn],b[mxn],l[mxn],r[mxn],ans[mxn]; struct seg{ int t[8*mxn]{0},lz[8*mxn]{0}; void build(int x){ for(int i=0;i<4*mxn;i++)t[i]=x,lz[i]=1e9; } void push(int i,int l,int r){ t[i]=min(lz[i],t[i]); if(l<r)lz[2*i]=min(lz[i],lz[2*i]),lz[2*i+1]=min(lz[2*i+1],lz[i]); lz[i]=1e9; } void upd(int i,int l,int r,int tl,int tr,int v){ push(i,l,r); if(r<tl||l>tr)return; if(r<=tr&&l>=tl){ lz[i]=min(lz[i],v);push(i,l,r);return; }int m=(l+r)>>1;upd(2*i,l,m,tl,tr,v);upd(2*i+1,m+1,r,tl,tr,v); t[i]=min(t[2*i],t[2*i+1]); } int qr(int i,int l,int r,int tl,int tr){ push(i,l,r); if(r<tl||l>tr)return 1e9; if(r<=tr&&l>=tl)return t[i]; int m=(l+r)>>1; return min(qr(2*i,l,m,tl,tr),qr(2*i+1,m+1,r,tl,tr)); } }sl,sr; int sg[2*mxn]{0}; void upd(int i,int sz,int amt){ i+=sz;sg[i]=amt; for(i>>=1;i;i>>=1)sg[i]=min(sg[2*i],sg[2*i+1]); } int qr(int l,int r,int sz,int rs=1e9){ for(l+=sz,r+=sz;l<r;l>>=1,r>>=1){ if(l&1)rs=min(rs,sg[l++]); if(r&1)rs=min(rs,sg[--r]); }return rs; }vector<int>up[mxn]; vector<pii>query[mxn]; int main(){ ios_base::sync_with_stdio(0);cin.tie(0); int n;cin>>n;sl.build(0);sr.build(1e9); for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>b[i]; for(int i=1;i<=n;i++){ l[i]=-sl.qr(1,1,2*n,b[i],a[i]); sl.upd(1,1,2*n,b[i],a[i],-i); }for(int i=1;i<=n;i++)sg[i+n-1]=l[i]; for(int i=n-1;i>0;i--)sg[i]=min(sg[2*i],sg[2*i+1]); for(int i=n;i>=1;i--){ r[i]=sr.qr(1,1,2*n,b[i],a[i]); sr.upd(1,1,2*n,b[i],a[i],i); } for(int i=1;i<=n;i++){ if(r[i]==1e9)continue; up[r[i]].pb(i); }int q;cin>>q; for(int i=1;i<=q;i++){ int l,r;cin>>l>>r; query[r].pb({l,i}); } for(int i=1;i<=n;i++){ for(auto it : up[i]){ upd(it-1,n,1e9); } for(auto [tl,id]:query[i]){ ans[id] = (qr(tl-1,i,n)>=tl?1:0); } } for(int i=1;i<=q;i++)cout<<(ans[i]?"Yes\n":"No\n"); }
#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...