题意理解:
给定一系列数字,将其插入一个初始为空的最小堆中,随后给定任意下标I,打印从H[i]到根节点的路径。
###样例输入
5 3
46 23 26 24 10
5 4 3
###输出样例
24 23 10
46 23 10
26 10
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1001
#define MINH -99999
int H[MAXN],size;
void create()//创建堆
{
size = 0;
H[0]=MINH;
}
void Insert(int X)//插入元素
{
int i;
for(i=size++;H[i/2]<X;i/=2)
H[i/2]=H[i];
H[i]=X;
}
int main()
{
int n,m,x,i,j;
scanf("%d%d",&n,&m);
create();
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;
}
472

被折叠的 条评论
为什么被折叠?



