Pagini recente » Borderou de evaluare (job #568064) | Borderou de evaluare (job #2912683) | Cod sursa (job #2078315)
#include<cstdio>
#include<algorithm>
using namespace std;
const int nmax=2000000,vid=-1;
int hv[nmax+5],lh;
void goup(int poz)
{
if(hv[poz]<hv[poz/2] || hv[poz/2]==-1)
{
swap(hv[poz],hv[poz/2]);
poz=poz/2;
}
}
void godown(int poz)
{
if(hv[poz*2]==vid && hv[poz*2+1]==vid)
return ;
if(hv[poz*2]==vid)
{
swap(hv[poz],hv[poz*2+1]);
godown(poz*2+1);
return ;
}
else
if(hv[poz*2+1]==vid)
{
swap(hv[poz],hv[poz*2]);
godown(poz*2);
return ;
}
else
{
if(hv[poz*2]<hv[poz*2+1])
{
swap(hv[poz],hv[poz*2]);
godown(poz*2);
}
else
{
swap(hv[poz],hv[poz*2+1]);
godown(poz*2+1);
}
return ;
}
}
void insertv(int x)
{
lh++;
hv[lh]=x;
goup(lh);
}
void deletev(int poz)
{
hv[poz]=-1;
godown(poz);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int n,i,x;
lh=0;
for(i=1;i<=nmax;i++)
hv[i]=vid;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
insertv(x);
}
for(i=1;i<=n;i++)
{
printf("%d ",hv[1]);
deletev(1);
}
return 0;
}