Cod sursa(job #2194455)

Utilizator MaligMamaliga cu smantana Malig Data 13 aprilie 2018 13:21:12
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#if 1
#include <bits/stdc++.h>
#else
#include "includes.h"
#endif

using namespace std;

#if 1
#define pv(x) cout<<#x<<" = "<<x<<"; ";cout.flush()
#define pn cout<<endl
#else
#define pv(x)
#define pn
#endif

#ifdef ONLINE_JUDGE
#define in cin
#define out cout
#else
ifstream in("sdo.in");
ofstream out("sdo.out");
#endif

using ll = long long;
using ull = unsigned long long;
using uint = unsigned int;
#define pb push_back
#define mp make_pair
const int NMax = 2e5 + 5;
const ll inf_ll = 1e18 + 5;
const int inf_int = 1e9 + 5;
const int mod = 100003;
using zint = int;

int part(int st, int dr, int K, vector<int>& v) {
	int idx = rand() % (dr - st + 1) + st;
	swap(v[idx], v[dr]);

	int i = st - 1;
	for (int j = st; j <= dr; ++j) {
		if (v[j] <= v[dr]) {
			swap(v[++i], v[j]);
		}
	}

	return i;
}

void solve(int st, int dr, int K, vector<int>& v) {
	if (st >= dr) {
		return;
	}

	int idx = part(st, dr, K, v);
	if (K < idx) {
		solve(st, idx - 1, K, v);
	}
	else {
		solve(idx + 1, dr, K, v);
	}
}

int main() {
	cin.sync_with_stdio(false);
	cin.tie(0);

	int N, K;
	in >> N >> K;
	vector<int> v(N, 0);
	for (int& val : v) {
		in >> val;
	}

	srand(time(0));
	--K;
	solve(0, N-1, K, v);

	out << v[K];

	return 0;
}