Pagini recente » Cod sursa (job #1744528) | Cod sursa (job #1215555) | Cod sursa (job #1612325) | Cod sursa (job #925731) | Cod sursa (job #2282213)
#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;
}