Cod sursa(job #2078174)

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