Pagini recente » Cod sursa (job #2880574) | Cod sursa (job #198644) | Cod sursa (job #1628771) | Cod sursa (job #976643) | Cod sursa (job #2282207)
#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 ma, j, i = 1;
swap( V[ 1 ], V[ dim ] );
V[ dim ] = INFI;
dim--;
while ( i < dim && ( V[ i ] > V[ 2 * + 1 ] || V[ i ] > V[ 2 * i ] ) ) {
if ( 2 * i <= dim && V[ 2 * i ] < V[ 2 * i + 1 ] ) swap( V[ i ], V[ 2 * i ] ), i = 2 * i;
else if ( 2 * i + 1 <= dim ) swap( V[ i ], V[ 2 * i + 1 ] ), i = 2 * i + 1;
else i = dim;
}
}
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 ] );
pop();
}
return 0;
}