Pagini recente » Cod sursa (job #1921494) | Cod sursa (job #2604777) | Cod sursa (job #2873922) | Cod sursa (job #1058067)
#include <stdio.h>
#define IN "sdo.in"
#define OUT "sdo.out"
#define N 3000000
static long A[N + 1];
long partition(long start, long end)
{
long i, j, aux;
for (i = j = start; i < end; i++)
if (A[i] <= A[end]) {
aux = A[i];
A[i] = A[j];
A[j] = aux;
j++;
}
aux = A[j];
A[j] = A[end];
A[end] = aux;
return j;
}
long order_statistic(long start, long end, long k)
{
long q, i, t;
if (start <= end) {
q = partition(start, end);
t = q - start + 1;
if (t == k)
return A[q];
else if (t < k)
return order_statistic(q + 1, end, k - t);
else
return order_statistic(start, q - 1, k);
}
}
int main(void)
{
long i, n, k;
freopen(IN, "r", stdin);
freopen(OUT, "w", stdout);
scanf("%ld %ld", &n, &k);
for (i = 1; i <= n; i++)
scanf("%ld", &A[i]);
printf("%ld\n", order_statistic(1, n, k));
return 0;
}