Cod sursa(job #1250357)

Utilizator radudorosRadu Doros radudoros Data 28 octombrie 2014 00:32:13
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
using namespace std;

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

int a[3000000];

int partition(int in, int sf)
{
	if (in == sf)
		return in;
	int i = in - 1;
	for (int j = in; j <= sf; j++)
	{
		if (a[j] <= a[sf])
		{
			i++;
			int aux = a[i];
			a[i] = a[j];
			a[j] = aux;
		}
	}
	return i;

}


int kth_element(int n, int m)
{
	int in = 1;
	int sf = n;
	int k = n;
	while (sf > in && k != m)
	{
		k = rand() % (sf - in) + in;
		int aux = a[k];
		a[k] = a[sf];
		a[sf] = aux;
		int k = partition(in, sf);
		if (k == m)
			return a[k];
		else
		if (k > m)
		{
			sf = k - 1;
		}
		else
		{
			in = k + 1;
		}
	}
	return a[k];
}



int main()
{
	srand(921241215);
	int n,m;
	fin >> n >>m;
	for (int i = 1; i <= n; i++)
	{
		fin >> a[i];
	}
	fout << kth_element(n,m);

}