Cod sursa(job #828878)

Utilizator matei_cChristescu Matei matei_c Data 4 decembrie 2012 16:35:20
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

#define maxn 1000001
#define inf 2147483647

int n ;
int v[maxn] ;
int arbore[maxn] ;
int nrarb ;

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]);
		modifica( i, i, 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;
	
}