Pagini recente » Cod sursa (job #2643125) | Cod sursa (job #2966337) | Cod sursa (job #2385393) | Cod sursa (job #1045421) | Cod sursa (job #475691)
Cod sursa(job #475691)
#include<stdio.h>
int k,v[501010];
inline void inter(int &a,int &b)
{
int c;
c=a;
a=b;
b=c;
}
void afis();
inline void down_heap(int j)
{
long long minim=(1ll*1<<31)+2,minj=0;
//printf("%lld!\n",minim);
if(j*2<=k)
if(v[j*2]<v[j])
{ ;
minim=v[j*2];
minj=j*2;
}
if(j*2+1<=k)
{
if(v[j*2+1]<v[j])
{
if(v[j*2+1]<minim)
{
minim=v[j*2+1];
minj=j*2+1;
}
}
}
if(minim!=(1ll*1<<31)+2)
{
inter(v[minj],v[j]);
down_heap(minj);
}
}
inline void pop()
{
//afis();
v[1]=v[k];
--k;
down_heap(1);
// afis();
}
inline void up_heap(int j)
{
if(j/2!=0)
if(v[j/2]>v[j])
{
inter(v[j/2],v[j]);
up_heap(j/2);
}
}
void afis()
{
for(int i=1;i<=k;++i)
printf("%d ",v[i]);
printf("\n");
}
int N,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",&x);
v[i]=x;
up_heap(i);
}
k=N;
while(k>0)
{
printf("%d ",v[1]);
pop();
}
}