Pagini recente » Cod sursa (job #1127227) | Cod sursa (job #1587687) | Cod sursa (job #3276496) | Cod sursa (job #2863623) | Cod sursa (job #818794)
Cod sursa(job #818794)
#include <stdio.h>
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, j = right;
int mid = left + (right - left) / 2;
int mid_el = M[mid];
swap(mid, i++);
while (i < j)
{
if (M[i] > mid_el)
swap(i, j--);
else
++i;
}
if (M[i] > mid_el) --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;
}