Pagini recente » Cod sursa (job #1743384) | Cod sursa (job #2445967) | Cod sursa (job #2832392) | Rating giulia petre (giuliutza) | Cod sursa (job #1569669)
#include <iostream>
#include <cstdio>
#include <ctime>
#include <algorithm>
#define MAXN 3000100
using namespace std;
int n, k, a[MAXN];
int getRand(int lo, int hi)
{
return lo + rand()%(hi-lo);
}
void citire()
{
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
srand(time(NULL));
}
int part(int lo, int hi)
{
int pivot = a[getRand(lo, hi)];
for (int i = lo-1, j = hi+1; ; ) {
while (a[++i] < pivot);
while (a[--j] > pivot);
if (i < j)
swap(a[i], a[j]);
else
return j;
}
}
void solve(int lo, int hi)
{
if (lo >= hi) return;
int p = part(lo, hi);
if (k <= p)
solve(lo, p);
else
solve(p+1, hi);
}
int main()
{
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
citire();
solve(1, n);
printf("%d", a[k]);
return 0;
}