#include <stdio.h>
#include <iostream>
using namespace std;
int heapsize, length;
//Add a element
void Addheap(int a, int *heap)
{
heap[heapsize + 1] = a;
int p = heapsize + 1;
int q = p>>1;
heapsize++;
while(q >= 1)
{
if(a > heap[q])
{
heap[p] = heap[q]; //down
p = q;
q = p>>1;
}
else break;
}
heap[p] = a;
}
//change a element's value
void change_Value_heap(int p, int value, int *heap)
{
if(heap[p] != value)
{
if(value < heap[p]) //down p<<1
{
int q = p<<1;
while(q <= heapsize)
{
cout<<"daitao"<<endl;
if(q + 1 <= heapsize && heap[q+1] > heap[q]) q++;
if(value < heap[q])
{
heap[p] = heap[q];
p = q;
q = p<<1;
}
else break;
}
heap[p] = value;//a down
}
else
{
int q = p>>1;
while(q >= 1)
{
if(q + 1 <= heapsize && heap[q+1] > heap[q]) q++;
if(value > heap[q])
{
heap[p] = heap[q];
p = q;
q = p>>1;
}
else break;
}
heap[p] = value;//a up
}
}
}
void MAX_heapify(int p, int *heap)
{
int q = p<<1;
int largest = p;
while(q <= heapsize)
{
if(q+1 <= heapsize && heap[q] < heap[q+1]) q++;
if(heap[q] > heap[p])
largest = q;
if(largest != p)
{
int t = heap[p];
heap[p] = heap[largest];
heap[largest] = t;
p = largest;
q = p<<1;
}
else break;
}
}
void build_MAX_heap(int *heap)
{
int mid = heapsize / 2;
for(int i = mid; i >= 1; i--)
MAX_heapify(i, heap);
}
int main()
{
while(scanf("%d", &length) != EOF)
{
int i;
int heap[1000] = {0};
heapsize = length;
for(i = 1; i <= heapsize; i++)
cin>>heap[i];
build_MAX_heap(heap);
for(i = 1; i <= heapsize; i++)
cout<<heap[i]<<" ";
cout<<endl;
int add_element;
cout<<"please input added element:"<<endl;
cin>>add_element;
Addheap(add_element, heap);
for(i = 1; i <= heapsize; i++)
cout<<heap[i]<<" ";
cout<<endl;
int change_value, position;
cout<<"please input a position and a value to change:"<<endl;
cin>>position>>change_value;
change_Value_heap(position, change_value, heap);
for(i = 1; i <= heapsize; i++)
cout<<heap[i]<<" ";
cout<<endl;
}
return 0;
}