Cod sursa(job #1043083)

Utilizator Lucian-GeorgeFMI Popa Lucian George Lucian-George Data 27 noiembrie 2013 23:09:01
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
#define maxim 999999999
unsigned long v[500001],a[50000];

int main()
{
	unsigned long i,n,x,q,min,poz,m,ok,j,l,lung;
	ifstream f("algsort.in");
	ofstream g("algsort.out");
	f>>n;
	q=sqrt(n);
	//cout<<q<<endl;
	for (i=1; i<=n; i++)
	{
		f>>v[i];
		if (a[(i+q-1)/q]==0) a[(i+q-1)/q]=v[i];
		else
		if (a[(i+q-1)/q]>v[i]) a[(i+q-1)/q]=v[i];
		//cout<<a[i/q]<<" ";
	}
	//for (i=1; i<=n/q; i++) cout<<a[i]<<" ";
	
	lung=(n+q-1)/q;
	
	for (i=1; i<=n; i++)
	{
		min=maxim;
		for (j=1; j<=lung; j++)
			if (a[j]<min) {min=a[j]; poz=j;}
		g<<min<<" ";
		ok=1;
		m=maxim;
		for (j=(poz-1)*q+1; j<=poz*q; j++)
		{
			if (j<=n)
			if (v[j]==min && ok==1) {v[j]=maxim; ok=0;}
				else if (v[j]<m) m=v[j];
		}
		a[poz]=m;
		//cout<<endl;
		//for (l=1; l<=n; l++) cout<<v[l]<<" ";
	}
			
	return 0;
}