Cod sursa(job #2913511)

Utilizator radu.z5Zamfirescu Radu Ioan radu.z5 Data 14 iulie 2022 21:06:31
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <time.h>

using namespace std;

int partition(vector<int> &v, int a, int b)
{
	srand(time(NULL));
	int q = rand() % (b - a + 1) + a;

	int i = a - 1;
	int j = a;

	int x = v[q];

	swap(v[q], v[b]);

	while (j < b) {
		if (v[j] <= x)
			swap(v[++i], v[j]);

		j++;
	}

	swap(v[i + 1], v[b]);
	return i + 1;
}

int select(vector<int> &v, int a, int b, int i)
{
	if (a == b)
		return v[a];

	int q = partition(v, a, b);
	int k = q - a + 1;

	if (k == i)
		return v[q];
	else if (i < k)
		return select(v, a, q - 1, i);

	return select(v, q + 1, b, i - k);
}

int select(vector<int> &v, int i)
{
	return select(v, 0, (int) v.size() - 1, i);
}

int main(void)
{
	ifstream in("sdo.in");
	ofstream out("sdo.out");
	int i, n, k;

	in >> n >> k;
	vector<int> v(n);
	
	for (i = 0; i < n; i++)
		in >> v[i];
	
	out << select(v, k);

	in.close();
	out.close();
	return 0;
}