#include <bits/stdc++.h>
using namespace std;
void heapify(vector<int>& arr, int n, int i)
{
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if(left < n && arr[left] > arr[largest])
largest = left;
if(right < n && arr[right] > arr[largest])
largest = right;
if(largest != i)
{
swap(arr[i], arr[largest]);
heapify(arr, n, largest);
}
}
void heapSort(vector<int>& arr)
{
int n = arr.size();
// Build max heap
for(int i = n/2 - 1; i >= 0; i--)
heapify(arr, n, i);
// Sort
for(int i = n-1; i > 0; i--)
{
swap(arr[0], arr[i]);
heapify(arr, i, 0);
}
}
int main()
{
vector<int> arr = {4, 10, 3, 5, 1};
heapSort(arr);
for(int x : arr)
cout << x << " ";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGhlYXBpZnkodmVjdG9yPGludD4mIGFyciwgaW50IG4sIGludCBpKQp7CiAgICBpbnQgbGFyZ2VzdCA9IGk7CiAgICBpbnQgbGVmdCA9IDIgKiBpICsgMTsKICAgIGludCByaWdodCA9IDIgKiBpICsgMjsKCiAgICBpZihsZWZ0IDwgbiAmJiBhcnJbbGVmdF0gPiBhcnJbbGFyZ2VzdF0pCiAgICAgICAgbGFyZ2VzdCA9IGxlZnQ7CgogICAgaWYocmlnaHQgPCBuICYmIGFycltyaWdodF0gPiBhcnJbbGFyZ2VzdF0pCiAgICAgICAgbGFyZ2VzdCA9IHJpZ2h0OwoKICAgIGlmKGxhcmdlc3QgIT0gaSkKICAgIHsKICAgICAgICBzd2FwKGFycltpXSwgYXJyW2xhcmdlc3RdKTsKICAgICAgICBoZWFwaWZ5KGFyciwgbiwgbGFyZ2VzdCk7CiAgICB9Cn0KCnZvaWQgaGVhcFNvcnQodmVjdG9yPGludD4mIGFycikKewogICAgaW50IG4gPSBhcnIuc2l6ZSgpOwoKICAgIC8vIEJ1aWxkIG1heCBoZWFwCiAgICBmb3IoaW50IGkgPSBuLzIgLSAxOyBpID49IDA7IGktLSkKICAgICAgICBoZWFwaWZ5KGFyciwgbiwgaSk7CgogICAgLy8gU29ydAogICAgZm9yKGludCBpID0gbi0xOyBpID4gMDsgaS0tKQogICAgewogICAgICAgIHN3YXAoYXJyWzBdLCBhcnJbaV0pOwogICAgICAgIGhlYXBpZnkoYXJyLCBpLCAwKTsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICB2ZWN0b3I8aW50PiBhcnIgPSB7NCwgMTAsIDMsIDUsIDF9OwoKICAgIGhlYXBTb3J0KGFycik7CgogICAgZm9yKGludCB4IDogYXJyKQogICAgICAgIGNvdXQgPDwgeCA8PCAiICI7Cn0=