Cod sursa(job #2276829)

Utilizator flibiaVisanu Cristian flibia Data 5 noiembrie 2018 14:43:56
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, k, a[3000100], aux[3000100];

int dive(int st, int dr) {
	if (st == dr)
		return a[st];
	int piv = rand() % (dr - st + 1) + st;
	piv = a[piv];
	int l = st, r = dr;
	for (int i = st; i <= dr; i++)
		if (a[i] < piv)
			aux[l++] = a[i];
		else if (a[i] > piv)	
			aux[r--] = a[i];
	for (int i = st; i <= dr; i++)
		if (a[i] == piv)
			aux[l++] = a[i];
	for (int i = 1; i <= n; i++)
		a[i] = aux[i];	
	r++;
	l--;
	if (l == k)
		return aux[l];
	if (l < k)
		return dive(l + 1, dr);
	return dive(st, l - 1);
}

int main() {
	ios_base::sync_with_stdio(0);
	in.tie(NULL);
	srand(time(NULL));
	in >> n >> k;
	for (int i = 1; i <= n; i++)
		in >> a[i];
	out << dive(1, n);
	return 0;
}