Cod sursa(job #1243698)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 16 octombrie 2014 11:06:30
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 500000 + 1;

int N, heapSize;
int value[Nmax];

void UpHeap( int nod )
{
    while ( nod > 1 && value[nod / 2] > value[nod] )
    {
        swap( value[nod / 2], value[nod] );
        nod /= 2;
    }
}

void DownHeap( int nod )
{
    while ( 2 * nod <= heapSize )
    {
        int pos = 2 * nod;

        if ( 2 * nod + 1 <= heapSize && value[2 * nod + 1] < value[2 * nod] )
            pos = 2 * nod + 1;

        if ( value[nod] <= value[pos] )
            break;

        swap( value[nod], value[pos] );

        nod = pos;
    }
}

void insertHeap( int val )
{
    value[ ++heapSize ] = val;
    UpHeap( heapSize );
}

int eraseHeap()
{
    int val = value[1];

    value[1] = value[heapSize--];
    DownHeap( 1 );

    return val;
}

int main()
{
    ifstream in("algsort.in");
    ofstream out("algsort.out");

    int N, a;

    in >> N;

    for ( int i = 1; i <= N; ++i )
    {
        in >> a;
        insertHeap( a );
    }

    for ( int i = 1; i <= N; ++i )
    {
        out << eraseHeap() << " ";
    }

    return 0;
}