xmu 1466.祖先极值 (二)

2014-11-24 02:24:24 · 作者: · 浏览: 3
f(T[rr].l<=l)query(l,r,rr);//往右
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<<"插入"< for(i=0;i k=d-a[x][i].x;
mx=-1;
if(k>=0)query(k,d,1);
ans[a[x][i].id]=mx;
//cout< }
for(i=0;i dfs(son[x][i],d+1);//递归遍历
}
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));
build(0,n-1,1);//建立空树
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 scanf("%d%d",&j,&k);
s.x=j;s.id=i;
a[k].push_back(s);
}
/*for(i=0;i<=n;i++){
cout< for(j=0;j cout< }
cout< }*/
dfs(0,0);//从根遍历到最后
for(i=0;i if(ans[i]==-1)printf("Wrong request\n");
else printf("%d\n",ans[i]);
}
return 0;
}