#include <stdio.h>
#include <stdlib.h>
#define MAXN 1001 //多一个哨兵
#define MINH -10001
int H[MAXN], size;
void CreateHeap();
void Insert(int X);
int main()
{
int N,M,X;
int i,j;
scanf("%d %d",&N,&M);
CreateHeap();
for(i=0;i<N;i++){
scanf("%d",&X);
Insert(X);
}
for(i=0;i<M;i++){
scanf("%d",&j);
printf("%d",H[j]);
while(j>1){
j/=2;
printf(" %d",H[j]);
}
printf("\n");
}
return 0;
}
void CreateHeap(){
size=0;
H[0]=MINH;
}
void Insert(int X){ //小顶堆插入
int i;
for(i=++size;H[i/2]>X;i/=2)
H[i]=H[i/2]; //上滤X,最后的i位置即为X的插入位置
H[i]=X;
}
05-树7 堆中的路径
最新推荐文章于 2024-07-24 19:35:30 发布