#include<iostream>
#include<cstring>
using namespace std;
int h[1000000],l=0,n;
void ins(int v){
h[++l]=v;
int fa=l/2,so=l;
while (fa&&h[fa]<h[so]){
swap(h[fa],h[so]);
so=fa;
fa/=2;
}
}
void top(){
cout<<h[1]<<endl;
h[1]=h[l--];
int fa=1;
while (2*fa+1<=l&&h[fa]<max(h[fa*2],h[fa*2+1])){
if (h[fa*2]>h[fa*2+1]){
swap(h[fa],h[fa*2]);
fa=fa*2;
}
else{
swap(h[fa],h[fa*2+1]);
fa=fa*2+1;
}
}
}
int main(){
cin>>n;
int tmp;
for (int i=0;i<n;i++){
cin>>tmp;
ins(tmp);
}
for (int i=0;i<n;i++) top();
}
堆——heap
最新推荐文章于 2024-11-27 08:48:06 发布