#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+1];
this->size=0;
}
void insert(int key)
{
if (size == cap)
return;
size++;
arr[size]=key;
percolate_up(size);
}
void deleteMax()
{
if (size == 0)
return;
arr[1]=arr[size];
size--;
int index=1;
while (true)
{
int left=2*index;
int right=2*index+1;
int l=index;
if(left<=size && arr[left]>arr[l])
{
l=left;
}
if(right<=size && arr[right]>arr[l])
{
l=right;
}
if(l!=index)
{
swap(arr[index],arr[l]);
index=l;
}
else break;
};
}
void percolate_up(int i)
{
while(i>1 && arr[i]>arr[i/2])
{
swap(arr[i],arr[i/2]);
i=i/2;
}
}
void print()
{
for(int i=1; i<=size; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
};
int main()
{
heap h(10);
h.insert(1);
h.insert(2);
h.insert(3);
h.insert(4);
h.insert(5);
h.insert(6);
h.insert(7);
h.insert(8);
h.insert(9);
h.print();
h.deleteMax();
h.print();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIGhlYXAKewogICAgaW50IGNhcDsKICAgIGludCBzaXplOwogICAgaW50ICphcnI7CnB1YmxpYzoKICAgIGhlYXAoaW50IGNhcCkKICAgIHsKICAgICAgICB0aGlzLT5jYXA9Y2FwOwogICAgICAgIGFycj1uZXcgaW50W2NhcCsxXTsKICAgICAgICB0aGlzLT5zaXplPTA7CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaW50IGtleSkKICAgIHsKICAgICAgICBpZiAoc2l6ZSA9PSBjYXApCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgc2l6ZSsrOwogICAgICAgIGFycltzaXplXT1rZXk7CiAgICAgICAgcGVyY29sYXRlX3VwKHNpemUpOwogICAgfQoKICAgIHZvaWQgZGVsZXRlTWF4KCkKICAgIHsKICAgICAgICBpZiAoc2l6ZSA9PSAwKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIGFyclsxXT1hcnJbc2l6ZV07CiAgICAgICAgc2l6ZS0tOwogICAgICAgIGludCBpbmRleD0xOwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGxlZnQ9MippbmRleDsKICAgICAgICAgICAgaW50IHJpZ2h0PTIqaW5kZXgrMTsKICAgICAgICAgICAgaW50IGw9aW5kZXg7CiAgICAgICAgICAgIGlmKGxlZnQ8PXNpemUgJiYgYXJyW2xlZnRdPmFycltsXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbD1sZWZ0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKHJpZ2h0PD1zaXplICYmIGFycltyaWdodF0+YXJyW2xdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsPXJpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZihsIT1pbmRleCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3dhcChhcnJbaW5kZXhdLGFycltsXSk7CiAgICAgICAgICAgICAgICBpbmRleD1sOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgYnJlYWs7CiAgICAgICAgfTsKICAgIH0KCiAgICB2b2lkIHBlcmNvbGF0ZV91cChpbnQgaSkKICAgIHsKICAgICAgICB3aGlsZShpPjEgJiYgYXJyW2ldPmFycltpLzJdKQogICAgICAgIHsKICAgICAgICAgICAgc3dhcChhcnJbaV0sYXJyW2kvMl0pOwogICAgICAgICAgICBpPWkvMjsKICAgICAgICB9CgogICAgfQoKICAgIHZvaWQgcHJpbnQoKQogICAgewogICAgICAgIGZvcihpbnQgaT0xOyBpPD1zaXplOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8IGFycltpXSA8PCAiICAgIjsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBoZWFwIGgoMTApOwogICAgaC5pbnNlcnQoMSk7CiAgICBoLmluc2VydCgyKTsKICAgIGguaW5zZXJ0KDMpOwogICAgaC5pbnNlcnQoNCk7CiAgICBoLmluc2VydCg1KTsKICAgIGguaW5zZXJ0KDYpOwogICAgaC5pbnNlcnQoNyk7CiAgICBoLmluc2VydCg4KTsKICAgIGguaW5zZXJ0KDkpOwogICAgaC5wcmludCgpOwogICAgaC5kZWxldGVNYXgoKTsKICAgIGgucHJpbnQoKTsKfQoK