1. 程式人生 > >堆中的路徑

堆中的路徑

aps stream opened tracking trac 空格 輸入 data 區間

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

 

堆中的路徑