Submission #322014

#TimeUsernameProblemLanguageResultExecution timeMemory
322014GioChkhaidzeLong Mansion (JOI17_long_mansion)C++14
100 / 100
846 ms119148 KiB
#include <bits/stdc++.h> using namespace std; const int N=5e5+5; int n,q,x,y; int a[N],sz[N]; int L[N],R[N],ansl[N],ansr[N]; set < int > st[N]; set < int > :: iterator it; int main() { ios::sync_with_stdio(false); cin.tie(NULL),cout.tie(NULL); cin>>n; for (int i=1; i<n; i++) cin>>a[i]; for (int i=1; i<=n; i++) { cin>>sz[i]; for (int j=1; j<=sz[i]; j++) { cin>>x; st[x].insert(i); } } for (int i=1; i<=n; i++) st[i].insert(-1),st[i].insert(n+1); for (int i=1; i<n; i++) { it=st[a[i]].upper_bound(i); R[i]=(*it); --it; L[i]=(*it); } for (int i=1; i<=n; i++) { ansl[i]=ansr[i]=i; while (1) { if (1<ansl[i] && R[ansl[i]-1]<=ansr[i]) { ansr[i]=max(ansr[i],ansr[ansl[i]-1]); ansl[i]=min(ansl[i],ansl[ansl[i]-1]); } else if (ansr[i]<=n && ansl[i]<=L[ansr[i]]) { ansr[i]++; } else break; } } cin>>q; while (q--) { cin>>x>>y; if (ansl[x]<=y && y<=ansr[x]) cout<<"YES\n"; else cout<<"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...