#include<bits/stdc++.h>
using namespace std;
int tr[1000001],top_node=0;
bool empty(){ //判断堆是否为空
return top_node==0;
}
int top(){ //获取堆顶元素
return tr[1];
}
void push(int x){
tr[++top_node]=x;
int k=top_node;
while(k>1 && (tr[k/2]<tr[k]) ){
swap(tr[k/2],tr[k]);
k/=2;
}
}
void pop(){
tr[1]=tr[top_node--];
int k=1,next;
while(true){
next=k*2;
if(next>top_node) break;
if(next+1<=top_node){//找到k的左右节点的较大值
if(tr[next]<tr[next+1]){
next++;
}
}
if(tr[k]<tr[next]){
swap(tr[k],tr[next]);
k=next;
}else{
break;
}
}
}
int main(){
int n,x;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
push(x);
}
for(int i=1;i<=top_node;i++){
cout<<tr[i]<<" ";
}
cout<<endl;
push(15);
for(int i=1;i<=top_node;i++){
cout<<tr[i]<<" ";
}
cout<<endl;
pop();
for(int i=1;i<=top_node;i++){
cout<<tr[i]<<" ";
}
cout<<endl;
return 0;
}
05-28
3014
08-31
2255
09-10
483