Pagini recente » Cod sursa (job #2680983) | Cod sursa (job #406185) | Cod sursa (job #2132560) | Cod sursa (job #2349314) | Cod sursa (job #2522636)
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define ld long double
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
default_random_engine generator;
int n, k, a[3000100], h[3000100];
int kth(int st, int dr, int k) {
if (st == dr)
return a[st];
uniform_int_distribution<int> distribution(st, dr);
int piv = distribution(generator);
int l = st, r = dr;
int cnt = 0;
for (int i = st; i <= dr; i++) {
if (a[i] <= a[piv]) {
h[l++] = a[i];
cnt++;
} else
h[r--] = a[i];
}
for (int i = st; i <= dr; i++)
a[i] = h[i];
if (cnt >= k)
return kth(st, st + cnt - 1, k);
return kth(st + cnt, dr, k - cnt);
}
int main() {
ios_base::sync_with_stdio(0);
in.tie(NULL);
in >> n >> k;
for (int i = 1; i <= n; i++)
in >> a[i];
out << kth(1, n, k);
return 0;
}