else{
query(l,T[ll].r,ll);//往左
query(T[rr].l,r,rr);//往右
}
}
void dfs(int x,int d){
int i,j,k;
insert(d,1,v[x]);//插入v
//cout<<"插入"<
mx=-1;
if(k>=0)query(k,d,1);
ans[a[x][i].id]=mx;
//cout<
for(i=0;i
}
int main(){
int n,i,j,k;
v[0]=0;
struct Data s;
while(scanf("%d",&n)!=EOF){
memset(a,0,sizeof(a));
memset(son,0,sizeof(son));
for(i=1;i<=n;i++)scanf("%d",&v[i]);
for(i=1;i<=n;i++){
scanf("%d",&j);
son[j].push_back(i);//i是j的儿子
}
scanf("%d",&n);
for(i=0;i
s.x=j;s.id=i;
a[k].push_back(s);
}
/*for(i=0;i<=n;i++){
cout< for(j=0;j
cout<
dfs(0,0);//从根遍历到最后
for(i=0;i
else printf("%d\n",ans[i]);
}
return 0;
}