Pagini recente » Rezultatele filtrării | Borderou de evaluare (job #2372990) | Cod sursa (job #2078174)
#include<cstdio>
#include<algorithm>
using namespace std;
const int nmax=2000000,vid=-1;
int valhp[nmax+5],lh;//valoarea la cheia hp
void schimba(int p1,int p2)
{
swap(valhp[p1],valhp[p2]);
}
void goup(int poz)
{
while((valhp[poz]<valhp[poz/2] || valhp[poz/2]==vid) && poz>1)
{
schimba(poz,poz/2);
poz=poz/2;
}
}
int godown(int poz)
{
if(valhp[poz*2]==vid && valhp[poz*2+1]==vid)
return poz;
if(valhp[poz*2]==vid || (valhp[poz*2+1]<valhp[poz*2] && valhp[poz*2+1]!=vid))
{
schimba(poz,poz*2+1);
if(valhp[poz*2]!=vid)
return godown(poz*2+1);
return poz*2+1;
}
else
if(valhp[poz*2+1]==vid || (valhp[poz*2]<valhp[poz*2+1] && valhp[poz*2]!=vid))
{
schimba(poz,poz*2);
if(valhp[poz*2+1]!=vid)
return godown(poz*2);
return poz*2;
}
}
void insertv(int e)
{
lh++;
valhp[lh]=e;
goup(lh);
}
void deletev(int poz)
{
int rez;
valhp[poz]=vid;
rez=godown(poz);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int t,q,n,x,i,j,tip,e,nre=0;
lh=0;
for(i=1;i<=nmax;i++)
valhp[i]=vid;
scanf("%d",&t);
for(q=1;q<=t;q++)
{
scanf("%d",&x);
insertv(x);
}
for(q=1;q<=t;q++)
{
printf("%d ",valhp[1]);
deletev(1);
}
return 0;
}