Cod sursa(job #829376)

Utilizator BalcauIonutFMI-Balcau Ionut BalcauIonut Data 5 decembrie 2012 11:22:28
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#define max(x,y) (x<y)?x:y

using namespace std;

int a[2000001];
int maxim,val,pos,l,r;
void update(int nod,int left, int right){
	if(left==right){
			a[nod]=val;
			return;
		}
	int mij=(left+right)>>1;
	if(pos<=mij)
		update((nod<<1),left,mij);
	else
		update((nod<<1)+1,mij+1,right);
	if(a[nod<<1]<a[(nod<<1)+1]){
		a[nod]=a[nod<<1];
	}
	else{
		a[nod]=a[(nod<<1)+1];
	}
}

void del(int nod,int left,int right){
	if(left==right){
		a[nod]=2147483647;
	}
	else{
	int mij=(left+right)>>1;
		if(a[nod<<1]==val)
			del(nod<<1,left,mij);
		else
			if(a[(nod<<1)+1]==val)
				del((nod<<1)+1,mij+1,right);
	if(a[nod<<1]<a[(nod<<1)+1]){
		a[nod]=a[nod<<1];
	}
	else{
		a[nod]=a[(nod<<1)+1];
	}
	}
}

int main(){
	int n,m,x,i;
	ifstream fin("algsort.in");
	ofstream fout("algsort.out");
	fin>>n;
	for(i=1;i<=n;++i){
		fin>>val; pos=i;
		update(1,1,n);
	}
	for(i=1;i<=n;++i){
		fout<<a[1]<<' ';
		val=a[1];	  
		del(1,1,n);
	}
	return 0;
}