Cod sursa(job #804164)

Utilizator igsifvevc avb igsi Data 28 octombrie 2012 23:05:58
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
/*
 * Using randomized quicksort partition algorithm
 */
#include <fstream>
#include <cstdlib>

using namespace std;

int n, k, v[3000005];

int select (int l, int r)
{
	int i, j, t, pivot;

    pivot = l + rand() % (r - l + 1);
	t = v[r]; v[r] = v[pivot]; v[pivot] = t;

	for (i = l - 1, j = l; j < r; ++j)
		if (v[r] >= v[j])
		{
			++i;
			t = v[i];
			v[i] = v[j];
			v[j] = t;
		}
  	t = v[++i];
	v[i] = v[r];
	v[r] = t;

	if (i == k) return v[i];
	else if (i < k) return select (i+1, r);
	else return select (l, i-1);
}

int main()
{
	int i;
	ifstream fin ("sdo.in");
	ofstream fout ("sdo.out");

	srand(16);

	fin >> n >> k;
	for (i = 1; i <= n; ++i)
		fin >> v[i];

	fout << select (1, n) << endl;

	fin.close();
	fout.close();
	return 0;
}