Pagini recente » Cod sursa (job #207217) | Cod sursa (job #741155) | Cod sursa (job #2943327) | Cod sursa (job #1207969) | Cod sursa (job #481523)
Cod sursa(job #481523)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define nmax 3000005
int n, k, a [nmax];
int partitionare (int st, int dr)
{
int i=st-1, j=dr+1, piv=a [st+rand()%(dr-st)], aux;
do
{
do {++i;} while (a [i] <= piv);
do {--j;} while (a [j] >= piv);
if (i < j)
{
aux=a [i];
a [i]=a [j];
a [j]=aux;
}
else
return j;
} while (1);
}
int rez (int st, int dr)
{
if (st < dr)
{
int x=partitionare (st, dr);
if (x == k) return a [x];
if (x > k) rez (st, x);
else rez (x+1, dr);
}
}
int main ()
{
freopen ("sdo.in", "r", stdin);
freopen ("sdo.out", "w", stdout);
int i;
srand (time (0));
scanf ("%d%d", &n, &k);
for (i=1; i <= n; ++i) scanf ("%d", &a [i]);
printf ("%d\n", rez (1, n));
return 0;
}