Pagini recente » Cod sursa (job #102506) | Cod sursa (job #1488085) | Cod sursa (job #117054) | Cod sursa (job #156006) | Cod sursa (job #778949)
Cod sursa(job #778949)
#include<cstdio>
#include<algorithm>
using namespace std;
int h[2000002],a[1000002],b[1000002],i,n;
void heapup(int i)
{
if (i>1)
{
if (h[i]>h[i/2])
{
int aux;
aux=h[i];
h[i]=h[i/2];
h[i/2]=aux;
heapup(i/2);
}
}
}
void heapdown(int i)
{
if (h[i*2]!=0&&h[i*2+1]!=0)
{
if (h[2*i]>h[i]&&h[2*i+1]<h[2*i])
{
int aux;
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])
{
int aux;
aux=h[i];
h[i]=h[i*2+1];
h[i*2+1]=aux;
heapdown(i*2+1);
}
}
else if (h[i*2]>0&&h[i*2]>h[i]&&h[i*2]*h[i*2+1]==0)
{
int aux;
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]);
}
for (i=1;i<=n;i++)
{
h[i]=a[i];
heapup(i);
}
int m;
m=n;
for (i=1;i<=m;i++)
{
b[i]=h[1];
h[1]=h[n];
n--;
heapdown(1);
}
for (i=m;i>=1;i--)
{
printf("%d ",b[i]);
}
printf("\n");
return 0;
}