Pagini recente » Cod sursa (job #1693388) | Cod sursa (job #1689650) | Cod sursa (job #684097) | Cod sursa (job #246128) | Cod sursa (job #469141)
Cod sursa(job #469141)
using namespace std;
#include<cstdio>
long k,h[500001];
void downheap(long i)
{
long fiu=2*i,aux;
while(fiu<=k)
{
if(fiu<k && h[fiu+1]>h[fiu]) fiu++;
if(h[fiu]>h[i])
{
aux=h[fiu];
h[fiu]=h[i];
h[i]=aux;
i=fiu;
fiu=fiu*2;
}
else fiu=k+1;
}
}
void upheap(long i)
{
long tata=i/2,aux;
while(tata && h[tata]<h[i])
{
aux=h[tata];
h[tata]=h[i];
h[i]=aux;
i=tata;
tata=tata/2;
}
}
int main()
{
long i,n,aux;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%li",&n);
for(i=0;i<n;i++)
{
scanf("%li",&h[++k]);
upheap(k);
}
while(k>1)
{
aux=h[1];
h[1]=h[k];
h[k]=aux;
k--;
downheap(1);
}
for(i=1;i<=n;i++)
printf("%li ",h[i]);
return 0;
}