#include #include #include using namespace std; int n, saven, a[1000001], maxElement; void in() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); saven = n; } void pushDown(int i) { int leftChild = maxElement, rightChild = maxElement; if (i * 2 + 1 < n) leftChild = a[i * 2 + 1]; if (i * 2 + 2 < n) rightChild = a[i * 2 + 2]; while (i < n && a[i] > min(leftChild, rightChild)) { if (leftChild <= rightChild) { swap(a[i], a[i * 2 + 1]); i = i * 2 + 1; } else { swap(a[i], a[i * 2 + 2]); i = i * 2 + 2; } if (i * 2 + 1 < n) leftChild = a[i * 2 + 1]; else leftChild = maxElement; if (i * 2 + 2 < n) rightChild = a[i * 2 + 2]; else rightChild = maxElement; } } void pop() { a[0] = a[n - 1]; n--; pushDown(0); } void heapSort() { maxElement = *max_element(a, a + n); for (int i = n - 1; i >= 0; i--) pushDown(i); } void print() { for (int i = 0; i < saven - 1; i++) { printf("%d ", a[0]); pop(); } printf("%d\n", a[0]); pop(); } int main() { in(); heapSort(); print(); return 0; }