Cod sursa(job #2931189)

Utilizator Vasile_AndreiVasile Andrei Calin Vasile_Andrei Data 30 octombrie 2022 17:13:55
Problema Statistici de ordine Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>

using namespace std;

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

static int order_statistic(int x[], int l, int r, int K) {
	if (l < r) {
		int p = l + rand() % (r - l + 1);
		swap(x[l], x[p]);

		int i = l, j = r, d = 1;
		while (i < j) {
			if (x[i] > x[j]) {
				swap(x[i], x[j]);
				d = 1 - d;
			}

			i += d;
			j -= 1 - d;
		}

		if (i == K) return x[K];
		else if (i > K)
			return order_statistic(x, l, i - 1, K);
		return order_statistic(x, l + 1, r, K);
	}
}

constexpr int MAX_N = 3000005;
int N, K, i, x[MAX_N];

int main() {
	fin >> N >> K;
	for (i = 1; i <= N; i++)
		fin >> x[i];

	fout << order_statistic(x, 1, N, K);

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