#include <cstdio>
#include <cstdlib>
#include <stack>
#include <algorithm>
using namespace std;
const int MAXN = 100000;
int val[MAXN];
int n;
void MinAdjust(int i, int n) {
int j, temp = val[i];
j = 2 * i + 1;
while (j < n) {
if (j + 1 < n && val[j + 1] > val[j]) //在左右孩子中找最小的
j++;
if (val[j] <= temp)
break;
val[i] = val[j]; //把较小的子结点往上移动,替换它的父结点
i = j;
j = 2 * i + 1;
}
val[i] = temp;
}
void HeapSort() {
for (int i = n / 2 - 1; i >= 0; i--)
MinAdjust(i, n);
for (int i = n - 1; i >= 1; i--)
{
swap(val[i], val[0]);
MinAdjust(0, i);
}
} // HeapSort
int main() {
scanf("%d", &n);
for (int i = 0;i < n;i++) {
scanf("%d", &val[i]);
}
HeapSort();
for (int i = 0;i < n;i++) {
printf("%d ", val[i]);
}
puts("");
return 0;
}
/**************************************************************
Problem: 2176
User: admin
Language: C++
Result: Accepted
Time:37 ms
Memory:1536 kb
****************************************************************/