Cod sursa(job #2282213)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 13 noiembrie 2018 14:37:18
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>
#include <iostream>
using namespace std;

#define NMAX 500001
#define INFI 0x3f3f3f3f

int V[ NMAX ] = { INFI };
int dim;

void insert_heap( int k ) {
    int i = ++dim;
    V[ dim ] = k;

    while ( i > 1 && V[ i ] < V[ i / 2 ] ) {
        swap( V[ i ], V[ i / 2 ] );
        i /= 2;
    }

}

void pop( int i = 1 ) {

    int s, d, ma;
    ma = i;
    s = 2 * i;
    d = 2 * i + 1;

    if ( s <= dim && V[ ma ] > V[ s ] ) ma = s;;
    if ( d <= dim && V[ ma ] > V[ d ] ) ma = d;

    if ( ma != i ) {
        swap( V[ i ], V[ ma ] );
        pop( ma );
    }

}

int main () {

    freopen( "algsort.in", "r", stdin );
    freopen( "algsort.out", "w", stdout );

    int n, i, k;

    scanf( "%d", &n );
    for ( i = 1; i <= n; ++i ) {
        scanf( "%d", &k );
        insert_heap( k );
    }

    for ( i = 1; i <= n; ++i ) {
        printf( "%d ", V[ 1 ] );
        swap( V[ 1 ], V[ dim ] );
        dim--;
        pop();
    }

    return 0;
}