Cod sursa(job #1477718)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 26 august 2015 20:15:28
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int heap[500005];
int n;
int tata(int nr)
{
    return nr/2;
}
void upcheck(int pos)
{
    int t;
    t=tata(pos);
    while(t!=0&&heap[t]>heap[pos])
    {
        swap(heap[t],heap[pos]);
        pos=t;
        t=tata(pos);
    }
}
void add(int nr)
{
    heap[heap[0]]=nr;
    upcheck(heap[0]);
}
void rem()
{
    heap[1]=heap[heap[0]];
    heap[0]--;
}
int stanga(int nr)
{
    return 2*nr;
}
int dreapta(int nr)
{
    return 2*nr+1;
}
void downcheck(int pos)
{
    while(1)
    {
        int st=stanga(pos),dr=dreapta(pos);
        int best=pos;
        if(st<=heap[0])
        {
            if(heap[st]<heap[best])
            {
                best=st;
            }
        }
        if(dr<=heap[0])
        {
            if(heap[dr]<heap[best])
            {
                best=dr;
            }
        }
        if(best==pos) break;
        else
        {
            swap(heap[best],heap[pos]);
            pos=best;
        }
    }
}
int main()
{
    freopen ("algsort.in","r",stdin);
    freopen ("algsort.out","w",stdout);
    scanf("%d",&n);
    int nr;
    for(int i=1;i<=n;i++)
    {
        heap[0]++;
        scanf("%d",&nr);
        add(nr);
    }
    for(int i=1;i<=n;i++)
    {
        printf("%d ",heap[1]);
        rem();
        downcheck(1);
    }
}