제출 #1284851

#제출 시각아이디문제언어결과실행 시간메모리
1284851MuhammadSaramGift Exchange (JOI24_ho_t4)C++20
100 / 100
1728 ms74152 KiB
#include <bits/stdc++.h> using namespace std; #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define endl '\n' const int M = 1e6 + 1; int seg[M*2]; void modify(int p,int x,int v=0,int s=0,int e=M) { if (s+1==e) { seg[v]=x; return; } int mid=(s+e)/2, lc=v+1, rc=v+(mid-s)*2; if (p<mid) modify(p,x,lc,s,mid); else modify(p,x,rc,mid,e); seg[v]=max(seg[lc],seg[rc]); } int get(int l,int r,int v=0,int s=0,int e=M) { if (l>=e or r<=s) return -1; if (l<=s && e<=r) return seg[v]; int mid=(s+e)/2, lc=v+1, rc=v+(mid-s)*2; return max(get(l,r,lc,s,mid),get(l,r,rc,mid,e)); } int main() { ios::sync_with_stdio(0); cin.tie(NULL), cout.tie(NULL); int n; cin>>n; int a[n], b[n], ind[2*n+1], l[n], r[n]; for (int i=0;i<n;i++) cin>>a[i],ind[a[i]]=i,l[i]=-1,r[i]=n; for (int i=0;i<n;i++) cin>>b[i],ind[b[i]]=i; set<int> se; for (int i=2*n;i>=1;i--) { if (se.count(ind[i])) { auto it=se.upper_bound(ind[i]); if (it!=se.end()) r[ind[i]]=*it; it=se.lower_bound(ind[i]); if (it!=se.begin()) it--,l[ind[i]]=*it; se.erase(ind[i]); } else se.insert(ind[i]); } for (int i=n-1;i>=0;i--) { int x=get(b[i],a[i]); r[i]=min(r[i],n-x); modify(a[i],n-i), modify(b[i],n-i); } for (int i=1;i<=2*n;i++) modify(i,-1); for (int i=0;i<n;i++) { int x=get(b[i],a[i]); l[i]=max(l[i],x); modify(a[i],i), modify(b[i],i); } vector<pair<int,int>> v[n]; vector<int> v1[n]; for (int i=0;i<n;i++) { modify(i,0); v1[l[i]+1].push_back(i); } int q; cin>>q; string ans[q]; for (int i=0;i<q;i++) { int l,r; cin>>l>>r; v[l-1].push_back({r,i}); } for (int l=0;l<n;l++) { for (int i:v1[l]) modify(i,r[i]); for (auto [r,i]:v[l]) { if (get(l,r)<r) ans[i]="Yes"; else ans[i]="No"; } } for (int i=0;i<q;i++) cout<<ans[i]<<endl; 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...