Pagini recente » Cod sursa (job #1429285) | Cod sursa (job #145571) | Cod sursa (job #1994278) | Cod sursa (job #3264048) | Cod sursa (job #1659385)
#include <cstdio>
#include <ctime>
#include <algorithm>
using namespace std;
int v[3000010];
int main ()
{
freopen ("sdo.in", "r", stdin);
freopen ("sdo.out", "w", stdout);
srand (time (0));
int n, k;
scanf ("%d %d", &n, &k);
for (int i = 1; i <= n; ++i)
scanf ("%d", &v[i]);
int st = 1, dr = n;
while (st <= dr)
{
int x = rand () % (dr - st + 1) + st;
int piv = v[x];
int poz = st;
for (int i = st; i <= dr; ++i)
if (v[i] == piv && i < dr) swap (v[i--], v[dr]);
else if (v[i] <= piv) swap (v[i], v[poz++]);
--poz;
if (poz < k) st = poz + 1;
else if (poz > k) dr = poz - 1;
else
{
printf ("%d\n", piv);
return 0;
}
}
return 0;
}