Pagini recente » Cod sursa (job #2836366) | Cod sursa (job #942372) | Cod sursa (job #1748952) | Cod sursa (job #375058) | Cod sursa (job #1693356)
#include <bits/stdc++.h>
#define Nmax 3000005
using namespace std;
int N,K;
int v[Nmax];
void Read()
{
scanf("%d%d",&N,&K);
for(int i = 1; i <= N; ++i)
scanf("%d",&v[i]);
srand(unsigned(time(0)));
}
void Part(int li,int lf, int piv, int &st,int &dr)
{/// ( [li,st-1] < ) ( [st,dr] = ) ( [dr+1,lf] > )
swap(v[piv],v[lf]);
int p = li;
for(int i = li; i < lf; ++i)
if(v[i] < v[lf])
swap(v[p++],v[i]);
st = p;
for(int i = st; i < lf; ++i)
if(v[i] == v[lf])
swap(v[p++],v[i]);
swap(v[lf],v[p]);
dr = p;
}
void quicks(int li,int lf,int &pz)
{
int piv = li + rand() % (lf - li + 1);
int st,dr;
Part(li,lf,piv,st,dr);
if(pz < st)
quicks(li,st,pz);
else
if(pz > dr)
quicks(dr,lf,pz);
}
int main()
{
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
Read();
quicks(1,N,K);
printf("%d\n",v[K]);
return 0;
}