Pagini recente » Cod sursa (job #2914952) | Cod sursa (job #2840490) | Cod sursa (job #362427) | Cod sursa (job #398201) | Cod sursa (job #1480075)
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int NMAX = 3000505;
int n, k, A[NMAX];
void read() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++)
scanf("%d", &A[i]);
}
int get(int l, int r, int k) {
int pos = rand() % (r - l + 1) + l;
swap(A[r], A[pos]);
pos = r;
int smt = 0;
for (int i = l; i < r; i++) {
if (A[i] < A[pos]) {
swap(A[i], A[l + smt]);
smt++;
}
}
swap(A[pos], A[l + smt]);
if (smt + 1 == k) {
return A[pos];
} else {
if (smt >= k) {
return get(l, l + smt - 1, k);
}
return get(l + smt + 1, r, k - smt - 1);
}
}
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
read();
srand(time(0));
printf("%d\n", get(1, n, k));
return 0;
}