#include <iostream>
#include <vector>
using namespace std;
void push(vector<int>& heap, int x) {
heap.push_back(x);
int index = heap.size() - 1;
while (index > 0 && heap[index] < heap[(index - 1) / 2]) {
swap(heap[index], heap[(index - 1) / 2]);
index = (index - 1) / 2;
}
}
int pop_min(vector<int>& heap) {
int value = heap.front();
swap(heap.front(), heap.back());
heap.pop_back();
int index = 0;
while ((index * 2 + 1 < heap.size() && heap[index] > heap[index * 2 + 1]) ||
(index * 2 + 2 < heap.size() && heap[index] > heap[index * 2 + 2])) {
if (index * 2 + 2 < heap.size() && heap[index * 2 + 2] < heap[index * 2 + 1]) {
swap(heap[index], heap[index * 2 + 2]);
index = index * 2 + 2;
} else {
swap(heap[index], heap[index * 2 + 1]);
index = index * 2 + 1;
}
}
return value;
}
int main() {
vector<int> h;
push(h, 5);
push(h, 1);
push(h, 12);
push(h, 7);
push(h, 9);
cout << pop_min(h) << endl;
cout << pop_min(h) << endl;
push(h, 8);
cout << pop_min(h) << endl;
cout << pop_min(h) << endl;
cout << pop_min(h) << endl;
cout << pop_min(h) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgcHVzaCh2ZWN0b3I8aW50PiYgaGVhcCwgaW50IHgpIHsKCWhlYXAucHVzaF9iYWNrKHgpOwoJaW50IGluZGV4ID0gaGVhcC5zaXplKCkgLSAxOwoJd2hpbGUgKGluZGV4ID4gMCAmJiBoZWFwW2luZGV4XSA8IGhlYXBbKGluZGV4IC0gMSkgLyAyXSkgewoJCXN3YXAoaGVhcFtpbmRleF0sIGhlYXBbKGluZGV4IC0gMSkgLyAyXSk7CgkJaW5kZXggPSAoaW5kZXggLSAxKSAvIDI7Cgl9Cn0KCmludCBwb3BfbWluKHZlY3RvcjxpbnQ+JiBoZWFwKSB7CglpbnQgdmFsdWUgPSBoZWFwLmZyb250KCk7Cglzd2FwKGhlYXAuZnJvbnQoKSwgaGVhcC5iYWNrKCkpOwoJaGVhcC5wb3BfYmFjaygpOwoJCglpbnQgaW5kZXggPSAwOwoJd2hpbGUgKChpbmRleCAqIDIgKyAxIDwgaGVhcC5zaXplKCkgJiYgaGVhcFtpbmRleF0gPiBoZWFwW2luZGV4ICogMiArIDFdKSB8fAoJCSAgIChpbmRleCAqIDIgKyAyIDwgaGVhcC5zaXplKCkgJiYgaGVhcFtpbmRleF0gPiBoZWFwW2luZGV4ICogMiArIDJdKSkgewoJCWlmIChpbmRleCAqIDIgKyAyIDwgaGVhcC5zaXplKCkgJiYgaGVhcFtpbmRleCAqIDIgKyAyXSA8IGhlYXBbaW5kZXggKiAyICsgMV0pIHsKCQkJc3dhcChoZWFwW2luZGV4XSwgaGVhcFtpbmRleCAqIDIgKyAyXSk7CgkJCWluZGV4ID0gaW5kZXggKiAyICsgMjsKCQl9IGVsc2UgewoJCQlzd2FwKGhlYXBbaW5kZXhdLCBoZWFwW2luZGV4ICogMiArIDFdKTsKCQkJaW5kZXggPSBpbmRleCAqIDIgKyAxOwoJCX0KCX0KCQoJcmV0dXJuIHZhbHVlOwp9CgppbnQgbWFpbigpIHsKCXZlY3RvcjxpbnQ+IGg7CglwdXNoKGgsIDUpOwoJcHVzaChoLCAxKTsKCXB1c2goaCwgMTIpOwoJcHVzaChoLCA3KTsKCXB1c2goaCwgOSk7Cgljb3V0IDw8IHBvcF9taW4oaCkgPDwgZW5kbDsKCWNvdXQgPDwgcG9wX21pbihoKSA8PCBlbmRsOwoJcHVzaChoLCA4KTsKCWNvdXQgPDwgcG9wX21pbihoKSA8PCBlbmRsOwoJY291dCA8PCBwb3BfbWluKGgpIDw8IGVuZGw7Cgljb3V0IDw8IHBvcF9taW4oaCkgPDwgZW5kbDsKCWNvdXQgPDwgcG9wX21pbihoKSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=