Pagini recente » Cod sursa (job #1147378) | Cod sursa (job #1960523) | Cod sursa (job #2272996) | Cod sursa (job #2712269) | Cod sursa (job #818776)
Cod sursa(job #818776)
#include <stdio.h>
#define TRUE 1
int n, k;
int M[300000020];
void swap(int i, int j)
{
int aux = M[i];
M[i] = M[j];
M[j] = aux;
}
int partition(int left, int right)
{
int i = left - 1, j = right + 1;
int mid = left + (right - left) / 2;
int mid_el = M[mid];
swap(mid, left);
++i;
while (i < j)
{
if (M[i] > mid_el)
swap(i, j--);
else
++i;
}
if (i > left) --i;
swap(left, i);
return i;
}
int select(int k, int left, int right)
{
int i = partition(left, right);
if (k < i) return select(k, left, i - 1);
if (k > i) return select(k, i + 1, right);
return M[i];
}
int main(void)
{
int i;
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d %d", &n, &k);
for (i = 0; i < n; ++i)
scanf("%d", &M[i]);
printf("%d\n", select(k-1, 0, n-1));
return 0;
}