Pagini recente » Cod sursa (job #2215537) | Cod sursa (job #92465) | Cod sursa (job #9419) | Cod sursa (job #2596312) | Cod sursa (job #1385047)
#include <cstdio>
#include <algorithm>
using namespace std;
int n, v[500010];
inline void hip (int i)
{
if (2 * i > n) return;
if (2 * i + 1 > n && v[2 * i] >= v[i]) swap (v[2 * i], v[i]);
else if (2 * i + 1 <= n && max (v[2 * i], v[2 * i + 1]) > v[i])
{
int x;
if (v[2 * i] > v[2 * i + 1]) x = 2 * i;
else x = 2 * i + 1;
swap (v[i], v[x]);
hip (x);
}
}
int main ()
{
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
scanf ("%d", &n);
for (int i = 1; i <= n; ++i)
scanf ("%d", &v[i]);
for (int i = n / 2; i; --i)
hip (i);
int cn = n;
for (--n; n; --n)
{
swap (v[1], v[n + 1]);
hip (1);
}
for (int i = 1; i <= cn; ++i)
printf ("%d ", v[i]);
printf ("\n");
return 0;
}