Cod sursa(job #1033395)

Utilizator BionicMushroomFMI - Dumitrescu Tiberiu Alexandru BionicMushroom Data 16 noiembrie 2013 21:08:24
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<iostream>
#include<fstream>
#include<ctime>
using namespace std;

int x[3000001], k, n;
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, m = x[rand() % (d - s + 1) + s];
		do
		{
			while (x[i] < m)
				i++;
			while (x[j] > m)
				j--;
			if (i < j)
			{
				interschimba(x[i], x[j]);
				i++;
				j--;
			}
		} while (i < j);
		if (k < j)
			partitioneaza(s, j);
		else
			partitioneaza(i, d);
	}
}

int main ()
{
	f >> n >> k;
	for (int i = 1; i <= n; i++)
		f >> x[i];
	f.close();
	partitioneaza(1, n);
	g << x[k];
	g.close();
	return 0;
}