题目链接:https://www.luogu.org/problem/P1177
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a[2000005],num=0,c;
void up(int x){
while(a[x]<a[x/2]&&x!=1){
swap(a[x],a[x/2]);
x/=2;
}
}
void insert(int x){
num++;
a[num]=x;
up(num);
}
void down(int x){
while((a[x]>=a[x*2]&&x*2<=num)||(a[x]>=a[2*x+1]&&x*2+1<=num)){
if(a[x*2]<=a[x*2+1]){
swap(a[x],a[x*2]);
x*=2;
}
else{
swap(a[x],a[x*2+1]);
x=2*x+1;
}
}
}
void work(){
cout<<a[1]<<' ';
a[1]=a[num--];
down(1);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
int z;
cin>>z;
insert(z);
}
while(num!=1)
work();
printf("%d",a[1]);
return 0;
}