Cod sursa(job #1033297)

Utilizator BionicMushroomFMI - Dumitrescu Tiberiu Alexandru BionicMushroom Data 16 noiembrie 2013 18:35:17
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<iostream>
#include<fstream>
#include<ctime>
using namespace std;

int x[3000001], n, k, prec = 0;
ifstream f ("sdo.in");
ofstream g ("sdo.out");

void interschimba (int &x, int &y)
{
	int aux = x;
	x = y;
	y = aux;
}

void partitioneaza (int s, int d)
{
	if (s < d)
	{
		int i = s, j = d, poz = rand() % (d - s) + s, m;
		if (x[poz] == prec)
			if (poz + 1 <= d)
				poz++;
			else
				poz--;
		prec = m = x[poz];
		do
		{
			while (x[i] < m)
				i++;
			while (x[j] > m)
				j--;
			if (i <= j)
			{
				if (i == poz)
					poz = j;
				else
					if (j == poz)
						poz = i;
				interschimba(x[i],x[j]);
				i++;
				j--;
			}
		} while (i <= j);
		if (poz == k)
		{
			g << x[poz];
			g.close();
			return;
		}
		else
			if (k < poz)
				partitioneaza (s, poz);
			else
				partitioneaza (poz, d);
	}
}

void main ()
{
	srand (time(NULL));
	f >> n >> k;
	for (int i = 1; i <= n; i++)
		f >> x[i];
	f.close();
	partitioneaza(1, n);
}