Cod sursa(job #1043920)

Utilizator omunegruomunegru omunegru Data 29 noiembrie 2013 00:36:34
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<fstream>
#include<cmath>
#include<limits.h>
#define dim 500100
#define lim 2000000000
using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");
int  v[dim],s[dim];
int   Lung,l,i,j,minu,minu2,n,stop,pos;
inline int   minim(int a,int b) {
	if(a<b)
		return a;
	return b;
}
int main () {
	
	f>>n;
	l=sqrt(n);
	if(l*l!=n)
		l++;
	for(i=0;i<n;++i){
		f>>v[i];
		pos=i/l;
		if(!s[pos])
			s[pos]=v[i];
		else
			s[pos]=minim(s[pos],v[i]);
	}
	Lung=(n)/l;
	
	for(i=0;i<n;++i) {
		minu=lim;
		for(j=0;j<=Lung;++j) {
			if(s[j]<minu){
				minu=s[j];
				pos=j;
			}
		}
		g<<minu<<" ";
		stop=0;
		minu2=lim;
		for(j=l*(pos);j<(pos+1)*l && j<n;++j) {
			if(v[j]==minu && stop==0) {
				v[j]=lim;
				stop=1;
				
			}
			else {
				if(v[j]<=minu2) {
					minu2=v[j];
				}
			}
		}
		s[pos]=minu2;
	}
}