Maximum Heap Aizu - ALDS1_9_B

https://vjudge.net/problem/Aizu-ALDS1_9_B

 1 #include<iostream>
 2 using namespace std;
 3 const int MAX=2000000;
 4 int H,A[MAX+1];
 5 
 6 void maxHeapify(int i)
 7 {
 8     int l,r,largest;
 9     l=2*i;
10     r=2*i+1;
11 
12     //从左子结点,自身,右子节点中选出最大的点
13     if(l<=H &&A[l]>A[i]) largest=l;
14     else largest = i;
15     if(r<=H&&A[r]>A[largest]) largest =r;
16 
17     if(largest !=i)
18     {
19         swap(A[i],A[largest]);
20         maxHeapify(largest);
21     }
22 }
23 int main()
24 {
25     cin>>H;
26     for(int i=1; i<=H; i++) cin>>A[i];
27 
28     for(int i=H/2; i>=1; i--) maxHeapify(i);
29 
30     for(int i=1; i<=H; i++)
31     {
32         cout<<" "<<A[i];
33     }
34     cout<<endl;
35     return 0;
36 }

 

posted @ 2020-12-08 19:48  BlackSnow  阅读(132)  评论(0)    收藏  举报