Cod sursa(job #751443)

Utilizator ioanabIoana Bica ioanab Data 26 mai 2012 09:36:14
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

const int N=500006;
int h[N],nh;

void swap(int &a,int &b)
{
    int aux;
    aux=a;
    a=b;
    b=aux;
}


void up(int p)
{
    while(p>1 && h[p]<h[p/2])
    {
        swap(h[p],h[p/2]);
        p=p/2;
    }
}


void add(int val)
{
    h[++nh]=val;
    up(nh);
}

void down(int p)
{
    int S=p*2,D=S+1,op=p;
    if(S<=nh && h[S]<h[op])
        op=S;
    if(D<=nh && h[D]<h[op])
        op=D;
    if(op!=p)
    {
        swap(h[p],h[op]);
        down(op);
    }
}

void del (int p)
{
    swap(h[p],h[nh--]);
    up(p);
    down(p);
}


int main()
{
    int n,i,x;
    in>>n;
    for(i=1;i<=n;i++)
    {
        in>>x;
        add(x);
    }

    while(n--)
    {
        out<<h[1]<<" ";
        del(1);
    }

    return 0;
}