Pagini recente » Cod sursa (job #1337151) | Cod sursa (job #2410166) | Cod sursa (job #2632387) | Cod sursa (job #453896) | Cod sursa (job #2007665)
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
int v[3000005];
int splitPivot(int st, int dr, int pivot) {
int a = st - 1, b = st;
while(b <= dr) {
if(v[b] <= pivot) {
++ a;
swap(v[a], v[b]);
}
++ b;
}
return a;
}
void cautaK(int st, int dr, int k) {
if(st == dr) {
printf("%d\n", v[st]);
} else {
int pivot = v[rand() % (dr - st + 1) + st];
int poz = splitPivot(st, dr, pivot);
int ord = poz - st + 1;
if(k <= ord) {
cautaK(st, poz, k);
} else {
cautaK(poz + 1, dr, k - ord);
}
}
}
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
srand(time(NULL));
int n, k;
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; ++ i) {
scanf("%d", &v[i]);
}
cautaK(1, n, k);
return 0;
}