堆中的路径 05-树7 堆中的路径(25 分)

将一系列给定数字插入一个初始为空的小顶堆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
 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 #define MAXSIZE 1001
 5 #define Min -10001
 6 int H[MAXSIZE],size;
 7 void create(){
 8 size=0;
 9 H[0]=Min;
10 }
11 void Insert(int t){
12 int i;
13 for(i=++size;H[i/2]>t;i/=2)
14 H[i]=H[i/2];
15 H[i]=t;
16 }
17 int main()
18 {
19 int p,q,t;
20 cin>>p>>q;
21 if(p)
22 create();
23     for(int i=0;i<p;i++){
24         cin>>t; Insert(t);
25    }
26     for(int i=0;i<q;i++){
27     cin>>t; cout<<H[t];
28         for(;t/2>0;t/=2)
29         cout<<" "<<H[t/2];
30         cout<<endl;
31 }
32 return 0;
33 }
View Code