Submission #714072

#TimeUsernameProblemLanguageResultExecution timeMemory
714072Ahmed57Long Mansion (JOI17_long_mansion)C++14
100 / 100
315 ms52404 KiB
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3") #include <bits/stdc++.h> using namespace std; signed main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n; cin>>n; int arr[n-1]; for(int i= 0;i<n-1;i++){ cin>>arr[i]; } vector<vector<int>>v; for(int i = 0;i<n;i++){ int z;cin>>z; vector<int> tmp; for(int j= 0;j<z;j++){ int x;cin>>x; tmp.push_back(x); } v.push_back(tmp); } int nd[n+1]; for(int i = 0;i<=n;i++)nd[i] = n; int valr[n]; int vall[n]; for(int i = n-1;i>=1;i--){ for(auto j:v[i]){ nd[j]=i; } valr[i] = nd[arr[i-1]]; } for(int i = 0;i<=n;i++)nd[i] = -1; for(int i = 0;i<n-1;i++){ for(auto j:v[i]){ nd[j]=i; } vall[i]=nd[arr[i]]; } int l[n],r[n]; for(int i = 0;i<n;i++){ l[i]=i ,r[i] = i; while(1){ if(l[i]&&valr[l[i]]<=r[i]){ r[i] = max(r[i],r[l[i]-1]); l[i] = l[l[i]-1]; }else if(r[i]<n-1&&vall[r[i]]>=l[i]){ r[i]++; }else break; } } int q;cin>>q; while(q--){ int x,y; cin>>x>>y; x--;y--; if(y>=l[x]&&y<=r[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...