Cod sursa(job #481532)

Utilizator ilincaSorescu Ilinca ilinca Data 31 august 2010 20:34:21
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

#define nmax 3000005

using namespace std;

ifstream fin ("sdo.in");
ofstream fout ("sdo.out");

int n, k, a [nmax];

int partitionare (int st, int dr)
{
	int i=st-1, j=dr+1, piv=a [st+rand()%(dr-st+1)];
	while (1)
	{	
		do {++i;} while (a [i] < piv);
		do {--j;} while (a [j] > piv);
		if (i < j) swap (a [i], a [j]);
		else
			return j;
	} 
}

void rez (int st, int dr)
{
	if (st < dr)
	{
		int x=partitionare (st, dr);
		if (x >= k) rez (st, x);
		else rez (x+1, dr);	
	}
}

int main ()
{
	freopen ("sdo.in", "r", stdin);
	freopen ("sdo.out", "w", stdout);
	int i;
	srand (time (0));
	fin>>n>>k;;
	for (i=1; i <= n; ++i) fin>>a [i];;
	rez (1, n);
	fout<<a [k];
	return 0;
}