Pagini recente » Cod sursa (job #747309) | Borderou de evaluare (job #1743721) | Borderou de evaluare (job #482502) | Borderou de evaluare (job #1304511) | Cod sursa (job #1863636)
#include <fstream>
#include <algorithm>
#include <cstdlib>
using namespace std;
int n,sct,a[3000005],m[3000005];
ifstream fin("sdo.in");
ofstream fout("sdo.out");
void read()
{
fin>>n>>sct;
for(int i=0;i<n;i++)
fin>>a[i];
}
int part(int a[],int p,int q,int x)
{
int i=p-1;
for(int j=p;j<q;j++)
if(a[j]<=x)
{
i++;
swap(a[i],a[j]);
}
a[i]=x;
return i;
}
int select(int a[],int p,int q,int k)
{
int r=rand()%q+p;
r=part(a,p,q,a[r]);
int k1=r;
if(k==k1)
return a[k];
else
if(k<k1)
return select(a,p,k1,k);
else
return select(a,k1+1,q,p+k-k1-1);
}
int main()
{
read();
//fout<<part(a,0,n,a[0])<<"\n";
fout<<select(a,0,n,sct-1);
return 0;
}