将一系列给定数字插入一个初始为空的小顶堆 H【】。随后对任意给定的下标 i,打印从 H【i】到根结点的路径。
输入格式:
每组测试第 1 行包含 2 个正整数 N 和 M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间【-10000,10000】内的 N 个要被插入一个初始为空的小顶堆的整数。最后一行给出 M 个下标。
输出格式:
对输入中给出的每个下标i,在一行中输出从 H【i】到根结点的路径上的数据。数字间以 1 个空格分隔,行末不得有多余空格。
输入样例:
5 3
46 23 26 24 10
5 4 3
输出样例:
24 23 10
46 23 10
26 10
代码:
#include<vector>
#include<stdio.h>
#include<algorithm>
#include<functional>
using namespace std;
vector<int>heap;
int main(){
int length,test,temp,index;
scanf("%d%d",&length,&test);
heap.push_back(0);
while(length--){
scanf("%d",&temp);
heap.push_back(temp);
push_heap(heap.begin()+1,heap.end(),greater<int>());
}
while(test--){
scanf("%d",&index);
while(index){
printf("%d",heap[index]);
if(index>1)printf(" ");
index/=2;
}
printf("\n");
}
return 0;
}