Cod sursa(job #2078315)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 29 noiembrie 2017 12:14:39
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#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;
}