//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first
#define b second
#define endl '\n'
int it[500001];
set<int> ss[500001];
int n;
pair<int,int> ans[500001];
vector<int> pre[500001];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>n;
for(int i=0;i<n-1;i++){
cin>>it[i];
}
for(int i=0;i<n;i++){
int x;
cin>>x;
for(int j=0;j<x;j++){
int aa;
cin>>aa;
ss[aa].insert(i);
}
}
set<int> xx;
for(int i=1;i<n;i++){
auto j=ss[it[i-1]].upper_bound(i-1);
if(j==ss[it[i-1]].begin()){
xx.insert(i);
//cout<<i<<",,";
}
else{
j--;
pre[*j].pb(i);
}
}
//cout<<endl;
for(int i=0;i<n;i++){
auto j=xx.upper_bound(i);
if(j==xx.end()){
ans[i]={i,n-1};
}
else{
ans[i]={i,(*j)-1};
}
//cout<<ans[i].a<<":"<<ans[i].b<<endl;
if(i>0){
pair<int,int> cur=ans[i];
while(cur.a>0){
auto ac=ss[it[cur.a-1]].lower_bound(cur.a);
if(ac==ss[it[cur.a-1]].end()){
break;
}
/*if(i==3){
cout<<(*ac)<<endl;
}*/
if((*ac)>cur.b){
break;
}
pair<int,int> cur2=ans[cur.a-1];
ans[i].a=min(ans[i].a,cur2.a);
ans[i].b=max(ans[i].b,cur2.a);
// cout<<cur2.a<<"::"<<cur2.b<<endl;
if(cur2.b>=cur.b){
cur=ans[i];
continue;
}
int yy=ans[i].b;
for(int ii=yy+1;ii<n;ii++){
auto j=ss[it[ii-1]].lower_bound(ans[i].a);
/*if(i==1){
cout<<ii<<"<<<<<"<<endl;
}*/
if(j==ss[it[ii-1]].end()){
break;
}
if((*j)<=ans[i].b){
ans[i].b+=1;
continue;
}
break;
}
cur=ans[i];
continue;
}
}
//cout<<ans[i].a<<","<<ans[i].b<<endl;
for(auto j:pre[i]){
xx.insert(j);
}
}
int q;
cin>>q;
while(q--){
int aa,bb;
cin>>aa>>bb;
aa--;
bb--;
if(bb>=ans[aa].a and bb<=ans[aa].b){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
28 ms |
35948 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
28 ms |
35948 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
3082 ms |
59616 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
28 ms |
35948 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |