Pagini recente » Cod sursa (job #3283664) | Cod sursa (job #1255863) | Cod sursa (job #2956403) | Cod sursa (job #650080) | Cod sursa (job #481524)
Cod sursa(job #481524)
#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+1)], aux;
while (1)
{
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;
}
}
void rez (int st, int dr)
{
if (st < dr)
{
int x=partitionare (st, dr);
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]);
rez (1, n);
printf ("%d\n", a [k]);
return 0;
}