#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class heap
{
private:
vector<int> storage;
public:
heap(){}
heap(const vector<int>& vec):storage(vec){make_heap(storage.begin(),storage.end());}
void push(int n)
{
storage.push_back(n);
push_heap(storage.begin(),storage.end());
}
int pop()
{
pop_heap(storage.begin(),storage.end());
int high=storage.back();
storage.pop_back();
return high;
}
bool isempty()const
{
return storage.empty();
}
void print()const
{
for (auto e:storage)
cout <<e <<" ";
}
};
int main() {
vector <int> test = {1,4,2,5,7,3};
heap h=test;
h.print();cout <<endl;
h.push(4);
h.print();cout <<endl;
h.push(9);
h.print();
while (!h.isempty())
{
cout <<"pop " <<h.pop() <<endl;
h.print();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIGhlYXAKewpwcml2YXRlOgoJdmVjdG9yPGludD4gc3RvcmFnZTsKcHVibGljOgoJaGVhcCgpe30KCWhlYXAoY29uc3QgdmVjdG9yPGludD4mIHZlYyk6c3RvcmFnZSh2ZWMpe21ha2VfaGVhcChzdG9yYWdlLmJlZ2luKCksc3RvcmFnZS5lbmQoKSk7fQoJdm9pZCBwdXNoKGludCBuKQoJewoJCXN0b3JhZ2UucHVzaF9iYWNrKG4pOwoJCXB1c2hfaGVhcChzdG9yYWdlLmJlZ2luKCksc3RvcmFnZS5lbmQoKSk7Cgl9CglpbnQgcG9wKCkKCXsKCQlwb3BfaGVhcChzdG9yYWdlLmJlZ2luKCksc3RvcmFnZS5lbmQoKSk7CgkJaW50IGhpZ2g9c3RvcmFnZS5iYWNrKCk7CgkJc3RvcmFnZS5wb3BfYmFjaygpOwoJCXJldHVybiBoaWdoOwoJfQoJYm9vbCBpc2VtcHR5KCljb25zdAoJewoJCXJldHVybiBzdG9yYWdlLmVtcHR5KCk7Cgl9Cgl2b2lkIHByaW50KCljb25zdAoJewoJCWZvciAoYXV0byBlOnN0b3JhZ2UpCgkJCWNvdXQgPDxlIDw8IiAiOwoJfQp9OwoKaW50IG1haW4oKSB7Cgl2ZWN0b3IgPGludD4gdGVzdCA9IHsxLDQsMiw1LDcsM307CgloZWFwIGg9dGVzdDsKCWgucHJpbnQoKTtjb3V0IDw8ZW5kbDsKCWgucHVzaCg0KTsKCWgucHJpbnQoKTtjb3V0IDw8ZW5kbDsKCWgucHVzaCg5KTsKCWgucHJpbnQoKTsKCXdoaWxlICghaC5pc2VtcHR5KCkpCgl7CgkJY291dCA8PCJwb3AgIiA8PGgucG9wKCkgPDxlbmRsOwoJCWgucHJpbnQoKTsKCX0KCXJldHVybiAwOwp9