Cod sursa(job #566178)
#include <fstream>
#include <time.h>
#define maxn 3000005
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int i,N,K;
int v[maxn];
void citire()
{
fin >> N >> K;
for(i=1;i<=N;i++)
fin >> v[i];
}
int pivot(int st, int dr)
{
int i=st-1, j=dr+1, p=v[st+rand()%(dr-st+1)];
while(1)
{
for(i++;v[i]<p;i++);
for(j--;v[j]>p;j--);
if(i<j)
swap(v[i],v[j]);
else
return j;
}
}
void quickselect(int st, int dr, int k)
{
int piv,nr;
if(st==dr) return;
piv=pivot(st,dr);
nr=piv-st+1;
if(k<=nr)
quickselect(st,piv,k);
else
quickselect(piv+1,dr,k-nr);
}
int main()
{
srand(time(NULL));
citire();
quickselect(1,N,K);
fout << v[K];
}