Pagini recente » Cod sursa (job #296573) | Cod sursa (job #3145796) | Cod sursa (job #2532139) | Cod sursa (job #3210458) | Cod sursa (job #642524)
Cod sursa(job #642524)
#include <stdio.h>
#define NMAX 3000010
int a[NMAX];
void swap(int &a, int &b)
{
int aux = a;
a = b;
b = aux;
}
int partition(int left, int right, int *a)
{
int pivotIndex = (left + right) / 2;
int pivotValue = a[pivotIndex];
swap(a[right], a[pivotIndex]);
pivotIndex = left;
for (int i = left; i <= right; i++)
{
if (pivotValue > a[i])
{
swap(a[i], a[pivotIndex]);
pivotIndex++;
}
}
swap(a[pivotIndex], a[right]);
return pivotIndex;
}
int getKth(int left, int right, int *a, int k)
{
if (left == right)
return a[left];
int dist = partition(left, right, a);
if (dist-left+1 == k)
return a[dist];
else if (dist-left+1 > k)
return getKth(left, dist-1, a, k);
return getKth(dist+1, right, a, k-(dist-left+1));
}
int main()
{
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
int n, k;
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++)
scanf("%d ", &a[i]);
printf("%d", getKth(1, n, a, k));
return 0;
}