#include<bits/stdc++.h>
using namespace std;
class heap
{
int cap;
int size;
int *arr;
public:
heap(int cap)
{
this->cap=cap;
arr=new int[cap];
this->size=0;
}
void insert(int key)
{
size++;
arr[size]=key;
percolate_up(size);
}
void deleteMax()
{
arr[1]=arr[size];
size--;
int index=1;
int left=2*index;
int right=2*index+1;
int l=index;
if(left<=size && arr[left]>arr[1])
{
l=left;
}
if(right<=size && arr[right]>arr[1])
{
l=right;
}
if(l!=index)
{
swap(arr[index],arr[l]);
}
// percolate_down(arr,1);
}
void percolate_up(int i)
{
// int i=size;
while(i>1 && arr[i]>arr[i/2])
{
swap(arr[i],arr[i/2]);
i=i/2;
}
}
// void percolate_down(int i)
// {
// int left=2*i;
// int right=2*i+1;
// int l=i;
// if(left<=size && arr[])
// }
void print()
{
for(int i=1; i<=size; i++)
{
cout << arr[i] << endl;
}
}
};
int main()
{
heap h(10);
h.insert(12);
h.insert(3);
h.insert(1);
h.insert(9);
h.insert(7);
h.print();
h.deleteMax();
h.print();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIGhlYXAKewogICAgaW50IGNhcDsKICAgIGludCBzaXplOwogICAgaW50ICphcnI7CnB1YmxpYzoKICAgIGhlYXAoaW50IGNhcCkKICAgIHsKICAgICAgICB0aGlzLT5jYXA9Y2FwOwogICAgICAgIGFycj1uZXcgaW50W2NhcF07CiAgICAgICAgdGhpcy0+c2l6ZT0wOwogICAgfQoKICAgIHZvaWQgaW5zZXJ0KGludCBrZXkpCiAgICB7CiAgICAgICAgc2l6ZSsrOwogICAgICAgIGFycltzaXplXT1rZXk7CiAgICAgICAgcGVyY29sYXRlX3VwKHNpemUpOwogICAgfQoKICAgIHZvaWQgZGVsZXRlTWF4KCkKICAgIHsKICAgICAgICBhcnJbMV09YXJyW3NpemVdOwogICAgICAgIHNpemUtLTsKICAgICAgICBpbnQgaW5kZXg9MTsKCiAgICAgICAgaW50IGxlZnQ9MippbmRleDsKICAgICAgICBpbnQgcmlnaHQ9MippbmRleCsxOwogICAgICAgIGludCBsPWluZGV4OwogICAgICAgIGlmKGxlZnQ8PXNpemUgJiYgYXJyW2xlZnRdPmFyclsxXSkKICAgICAgICB7CiAgICAgICAgICAgIGw9bGVmdDsKICAgICAgICB9CiAgICAgICAgaWYocmlnaHQ8PXNpemUgJiYgYXJyW3JpZ2h0XT5hcnJbMV0pCiAgICAgICAgewogICAgICAgICAgICBsPXJpZ2h0OwogICAgICAgIH0KCiAgICAgICAgaWYobCE9aW5kZXgpCiAgICAgICAgewogICAgICAgICAgICBzd2FwKGFycltpbmRleF0sYXJyW2xdKTsKICAgICAgICB9CgogICAgICAgIC8vICBwZXJjb2xhdGVfZG93bihhcnIsMSk7CiAgICB9CgogICAgdm9pZCBwZXJjb2xhdGVfdXAoaW50IGkpCiAgICB7CiAgICAgICAgLy8gaW50IGk9c2l6ZTsKICAgICAgICB3aGlsZShpPjEgJiYgYXJyW2ldPmFycltpLzJdKQogICAgICAgIHsKICAgICAgICAgICAgc3dhcChhcnJbaV0sYXJyW2kvMl0pOwogICAgICAgICAgICBpPWkvMjsKICAgICAgICB9CgogICAgfQoKLy8gICAgdm9pZCBwZXJjb2xhdGVfZG93bihpbnQgaSkKLy8gICAgewovLyAgICAgICAgaW50IGxlZnQ9MippOwovLyAgICAgICAgaW50IHJpZ2h0PTIqaSsxOwovLyAgICAgICAgaW50IGw9aTsKLy8gICAgICAgIGlmKGxlZnQ8PXNpemUgJiYgYXJyW10pCi8vICAgIH0KCgoKICAgIHZvaWQgcHJpbnQoKQogICAgewogICAgICAgIGZvcihpbnQgaT0xOyBpPD1zaXplOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8IGFycltpXSA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KfTsKCmludCBtYWluKCkKewogICAgaGVhcCBoKDEwKTsKICAgIGguaW5zZXJ0KDEyKTsKICAgIGguaW5zZXJ0KDMpOwogICAgaC5pbnNlcnQoMSk7CiAgICBoLmluc2VydCg5KTsKICAgIGguaW5zZXJ0KDcpOwogaC5wcmludCgpOwogICAgaC5kZWxldGVNYXgoKTsKICAgIGgucHJpbnQoKTsKfQo=