#include <iostream>
#include <iterator>
#include <stdexcept>
#include <vector>
template <typename T>
void print(const std::vector<T>& arr) {
copy(arr.begin(), arr.end(), std::ostream_iterator<T>(std::cout, ", "));
std::cout << std::endl;
}
template <typename T>
void heapify(size_t index, std::vector<T>& heap) {
if (heap.size() <= 1)
return;
size_t moveTo = index;
std::cout << index << ": ";
if (2 * index + 1 < heap.size() && heap[moveTo] > heap[2 * index + 1]) {
moveTo = 2 * index + 1;
}
if (2 * index + 2 < heap.size() && heap[moveTo] > heap[2 * index + 2]) {
moveTo = 2 * index + 2;
}
if (index != moveTo) {
std::swap(heap[index], heap[moveTo]);
heapify(moveTo, heap);
}
}
template <typename T>
T extract_min(std::vector<T>& heap) {
if (heap.empty())
throw std::out_of_range("Out");
T res = heap[0];
std::swap(heap[0], heap[heap.size() - 1]);
heap.pop_back();
heapify(0, heap);
return res;
}
int main() {
std::vector<int> arr = {1, 10, 23, -5, -2, 0, 2, -100, -400, 3, -500, 10000};
for (size_t i = arr.size() / 2; ~i; --i) {
heapify(i, arr);
}
print(arr);
std::vector<int> res;
for (size_t i = 0; i < arr.size(); ++i) {
// res.push_back(extract_min(arr));
}
//print(res);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxzdGRleGNlcHQ+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZCBwcmludChjb25zdCBzdGQ6OnZlY3RvcjxUPiYgYXJyKSB7Cgljb3B5KGFyci5iZWdpbigpLCBhcnIuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxUPihzdGQ6OmNvdXQsICIsICIpKTsKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGhlYXBpZnkoc2l6ZV90IGluZGV4LCBzdGQ6OnZlY3RvcjxUPiYgaGVhcCkgewoJaWYgKGhlYXAuc2l6ZSgpIDw9IDEpCgkJcmV0dXJuOwoJc2l6ZV90IG1vdmVUbyA9IGluZGV4OwoJc3RkOjpjb3V0IDw8IGluZGV4IDw8ICI6ICI7CgkKCWlmICgyICogaW5kZXggKyAxIDwgaGVhcC5zaXplKCkgJiYgaGVhcFttb3ZlVG9dID4gaGVhcFsyICogaW5kZXggKyAxXSkgewoJCW1vdmVUbyA9IDIgKiBpbmRleCArIDE7Cgl9CgkKCWlmICgyICogaW5kZXggKyAyIDwgaGVhcC5zaXplKCkgJiYgaGVhcFttb3ZlVG9dID4gaGVhcFsyICogaW5kZXggKyAyXSkgewoJCW1vdmVUbyA9IDIgKiBpbmRleCArIDI7Cgl9CgkKCWlmIChpbmRleCAhPSBtb3ZlVG8pIHsKCQlzdGQ6OnN3YXAoaGVhcFtpbmRleF0sIGhlYXBbbW92ZVRvXSk7CgkJaGVhcGlmeShtb3ZlVG8sIGhlYXApOwoJfQp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KVCBleHRyYWN0X21pbihzdGQ6OnZlY3RvcjxUPiYgaGVhcCkgewoJaWYgKGhlYXAuZW1wdHkoKSkKCQl0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSgiT3V0Iik7CgkJCglUIHJlcyA9IGhlYXBbMF07CglzdGQ6OnN3YXAoaGVhcFswXSwgaGVhcFtoZWFwLnNpemUoKSAtIDFdKTsKCWhlYXAucG9wX2JhY2soKTsKCWhlYXBpZnkoMCwgaGVhcCk7CglyZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpIHsKCXN0ZDo6dmVjdG9yPGludD4gYXJyID0gezEsIDEwLCAyMywgLTUsIC0yLCAwLCAyLCAtMTAwLCAtNDAwLCAzLCAtNTAwLCAxMDAwMH07Cglmb3IgKHNpemVfdCBpID0gYXJyLnNpemUoKSAvIDI7IH5pOyAtLWkpIHsKCQloZWFwaWZ5KGksIGFycik7Cgl9CglwcmludChhcnIpOwoJc3RkOjp2ZWN0b3I8aW50PiByZXM7Cglmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyci5zaXplKCk7ICsraSkgewoJLy8JcmVzLnB1c2hfYmFjayhleHRyYWN0X21pbihhcnIpKTsKCX0KCS8vcHJpbnQocmVzKTsKCXJldHVybiAwOwp9
6: 5: 4: 10: 3: 8: 2: 5: 1: 4: 10: 0: 1: 3: 7: -500, -400, 0, -100, -2, 23, 2, 1, -5, 3, 10, 10000,