Pagini recente » Cod sursa (job #2789013) | Cod sursa (job #1537286) | Cod sursa (job #2168623) | Cod sursa (job #1043475) | Cod sursa (job #1041797)
#include<cstdio>
using namespace std;
int h[500002],a[500002],b[500002],i,n,m;
void heapup(int nod)
{
int aux;
if(h[nod]>h[nod/2]&&nod>1)
{
aux=h[nod];
h[nod]=h[nod/2];
h[nod/2]=aux;
heapup(nod/2);
}
}
void heapdown(int i)
{
int aux;
if (i*2+1<=m)
{
if (h[2*i]>h[i]&&h[2*i+1]<=h[2*i])
{
aux=h[i];
h[i]=h[i*2];
h[i*2]=aux;
heapdown(i*2);
}
if (h[2*i+1]>h[i]&&h[2*i+1]>=h[2*i])
{
aux=h[i];
h[i]=h[i*2+1];
h[i*2+1]=aux;
heapdown(i*2+1);
}
}
else if (i*2<=m&&i*2+1>m)
{
aux=h[i];
h[i]=h[i*2];
h[i*2]=aux;
heapdown(i*2);
}
return;
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
h[i]=a[i];
heapup(i);
}
m=n;
for(i=1;i<=n;i++)
{
b[i]=h[1];
h[1]=h[m];
m--;
h[m+1]=0;
heapdown(1);
}
for (i=n;i>=1;i--)
{
printf("%d ",b[i]);
}
return 0;
}