Pagini recente » Cod sursa (job #628942) | Cod sursa (job #3204560) | Cod sursa (job #177384) | Cod sursa (job #560010) | Cod sursa (job #771207)
Cod sursa(job #771207)
#include <stdio.h>
#include <cstdlib>
#define NMAX 3000001
using namespace std;
int v[NMAX], n, K;
void sw(int* a, int* b) {
int aux = *a;
*a = *b;
*b = aux;
}
int pivot(int a, int b) {
return a + (rand() % (b - a));
}
void qSort_(int a, int b) {
if (a >= b) {
return;
}
int p = pivot(a, b);
int piv = v[p];
sw(&v[p], &v[b]);
int left = a - 1;
int right = b;
while (left < right) {
while (left < right && piv > v[++left]) {}
while (left < right && piv < v[--right]) {}
sw(&v[left], &v[right]);
}
sw(&v[b], &v[left]);
if (left < K - 1) {
qSort_(left + 1, b);
} else if (left > K - 1) {
qSort_(a, left - 1);
}
}
void read_() {
scanf("%d%d", &n, &K);
for (int i = 0; i < n; i++) {
scanf("%d", &v[i]);
}
}
void print_() {
printf("%d", v[K - 1]);
}
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
read_();
qSort_(0, n - 1);
print_();
return 0;
}