Pagini recente » Cod sursa (job #3169367) | Cod sursa (job #3285948) | Cod sursa (job #2638515) | Cod sursa (job #825117) | Cod sursa (job #829463)
Cod sursa(job #829463)
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#define MAXN 3000002
using namespace std;
int a[MAXN], n, k;
int partition(int left, int right)
{
int q = (rand()% (right - left)) + left;
swap(a[q], a[right]);
int x = a[right];
int i = left - 1;
for(int j = left; j <= right - 1; j++)
if(a[j] < x)
{
i++;
swap(a[i], a[j]);
}
swap(a[right], a[i + 1]);
return i + 1;
}
int p_termen(int l, int r, int p)
{
if(l == r)
return a[l];
int j = partition(l, r);
int i = j - l + 1;
if(i == p)
return a[i];
if(p < i)
return p_termen(l, i - 1, p);
else
return p_termen(i + 1, r, p - i);
}
int main()
{
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d %d", &n, &k);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
printf("%d", p_termen(1, n, k));
return 0;
}