Pagini recente » Cod sursa (job #1445914) | Cod sursa (job #1600943) | Cod sursa (job #974263) | Cod sursa (job #678009) | Cod sursa (job #2279641)
#include <ctime>
#include <cstdlib>
#include <cstdio>
#define VMAX 3000010
int n, k;
int v[VMAX];
int partition(int lo, int hi) {
int rnd = rand() % (hi - lo + 1) + lo;
int aux = v[rnd];
v[rnd] = v[hi];
v[hi] = aux;
int p = v[lo];
int l = lo, r = hi;
while (l < r) {
while (l < r && v[r] >= p)
r--;
v[l] = v[r];
while (l < r && v[l] <= p)
l++;
v[r] = v[l];
}
v[r] = p;
return r;
}
int quick(int lo, int hi) {
int pivot = partition(lo, hi);
if (pivot == k)
return v[k];
if (k < pivot) {
if (pivot - 1 > lo)
return quick(lo, pivot - 1);
return v[k];
}
if (pivot + 1 < hi)
return quick(pivot + 1, hi);
return v[k];
}
int main() {
int i;
srand(time(NULL));
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d %d\n", &n, &k);
for (i = 1; i <= n; i++)
scanf("%d ", &v[i]);
printf("%d\n", quick(1, n));
fclose(stdout);
return 0;
}