Mai intai trebuie sa te autentifici.

Cod sursa(job #1784836)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 20 octombrie 2016 15:54:39
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#define NMAX 500001
#define SMAX 710
#define INF ((1 << 32)- 1)

using namespace std;

unsigned int A[NMAX], n, A_MIN[111];
ifstream in("algsort.in");
ofstream out("algsort.out");

void Update(int B)
{
	unsigned int L = sqrt(n);
	unsigned int minim = A[B*L + 1];
	for (unsigned int i = B*L + 1; i <= (B + 1) * L && i <= n; ++i)
		minim = min(minim, A[i]);
	A_MIN[B + 1] = minim;
}

int main()
{
	in >> n;
	for (unsigned int i = 1; i <= n; ++i)
		in >> A[i];
	in.close();
	unsigned int L = sqrt(n);
	unsigned int length = L;
	if ((double)L < sqrt(n))
		L++;
	for (unsigned int i = 1; i <= L; ++i)
		Update(i - 1);
	for (unsigned int j = 1; j <= n; ++j)
	{
		unsigned int minn = A_MIN[1], buc = 1;
		for (unsigned int i = 2; i <= L; ++i)
			if (minn > A_MIN[i])
			{
			minn = A_MIN[i];
			buc = i;
			}
		out << minn << " ";
		unsigned int x = 2 * buc - 1;
		unsigned int y = x + length - 1;
		for (unsigned int i = x; i <= y; ++i)
			if (A[i] == minn)
			{
				A[i] = INF;
				break;
			}
		minn = A[x];
		for (unsigned int i = x + 1; i <= y; ++i)
		{
			if (minn > A[i])
				minn = A[i];
		}
		A_MIN[buc] = minn;
	}
	out.close();
}