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