Pagini recente » Cod sursa (job #920748) | Cod sursa (job #550883) | Cod sursa (job #571685) | Cod sursa (job #1875049) | Cod sursa (job #828922)
Cod sursa(job #828922)
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn ( 1 << 20 )
#define inf 2147483647
int n ;
int v[maxn] ;
int arbore[maxn] ;
int nrarb ;
void solve(int nod, int stn, int drn)
{
if( stn == drn )
{arbore[nod] = stn;return;}
solve( nod * 2, stn, (stn + drn)/2);
solve( nod * 2 + 1, (stn + drn)/2 + 1, drn);
arbore[nod] = arbore[ nod * 2];
if( v[arbore[ nod * 2 + 1]] < v[arbore[nod]])
arbore[nod] = arbore[nod*2+1];
}
void modifica(int value, int poz, int nod, int st, int dr)
{
if( poz > dr || poz < st) return ;
if( st == dr) {
arbore[nod] = value;
return ;
}
modifica( value, poz, nod * 2, st, ( dr + st ) / 2 ) ;
modifica( value, poz, nod * 2 + 1, ( st + dr ) / 2 + 1, dr ) ;
if( v[arbore[nod*2]] < v[arbore[nod*2+1]] )
arbore[nod] = arbore[nod*2] ;
else
arbore[nod] = arbore[nod*2+1] ;
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i )
{
scanf("%d", &v[i]);
}
solve(1,1,n);
v[0] = inf;
for(int i = 1; i <= n; ++i )
{
printf("%d ", v[ arbore[1] ] );
modifica( 0, arbore[1], 1, 1, n ) ;
}
return 0;
}