Pagini recente » Cod sursa (job #29438) | Cod sursa (job #2685211) | Cod sursa (job #1457759) | Cod sursa (job #203447) | Cod sursa (job #779977)
Cod sursa(job #779977)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <algorithm>
#define NMax 3000010
using namespace std;
const char IN[]="sdo.in",OUT[]="sdo.out";
int N,K;
int v[NMax];
int pick()
{
int ls,ld,i,j;
for (ls=1,ld=N;ls<ld;)
{
swap(v[ls],v[rand()%(ld-ls+1)+ls]);
for (j=ls,i=ls+1;i<=ld;++i)
if (v[i]<=v[ls])
swap(v[i],v[++j]);
swap(v[j],v[ls]);
if (K<j) ld=j-1;
else if (K>j) ls=j+1;
else return v[j];
}
return v[ls];
}
int main()
{
int i;
freopen(IN,"r",stdin);
scanf("%d%d",&N,&K);
for (i=1;i<=N;++i) scanf("%d",v+i);
fclose(stdin);
srand(time(NULL));
freopen(OUT,"w",stdout);
printf("%d\n",pick());
fclose(stdout);
return 0;
}