Pagini recente » Cod sursa (job #1227451) | Cod sursa (job #2780325) | Cod sursa (job #2663816) | Cod sursa (job #2586107) | Cod sursa (job #728878)
Cod sursa(job #728878)
#include <stdio.h>
#include <stdlib.h>
int n, k, i;
int data[3000001];
int part(int inf, int sup) {
int pivot = inf + rand() % (sup - inf + 1);
int i = inf - 1, j = sup, tmp;
while (1) {
do {
i++;
} while(data[i] < data[pivot]);
do {
j--;
} while(data[j] > data[pivot]);
if (i < j) {
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
else
return j;
}
return 0;
}
int kthelem(int inf, int sup, int k) {
if (inf == sup) return data[k];
int index = part(inf, sup);
if (sup - index + 1 >= k)
return kthelem(inf, index, k);
return kthelem(index + 1, sup, k - sup + inf + 1);
}
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d %d", &n, &k);
for (i = 0; i < n; i++) {
scanf("%d", &data[i]);
}
printf("%d\n", kthelem(0, n - 1, k - 1));
return 0;
}