Pagini recente » Cod sursa (job #1198264) | Cod sursa (job #2459402) | Cod sursa (job #2631705) | Cod sursa (job #3140560) | Cod sursa (job #1863637)
#include <fstream>
#include <algorithm>
#include <cstdlib>
using namespace std;
int n,sct,a[3000005],b[3000005],c[3000005],vfb,vfc;
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)
{
vfc=p;
vfb=p;
int i=p-1;
for(int i=p;i<q;i++)
if(a[i]<x)
b[vfb++]=a[i];
else
c[vfc++]=a[i];
for(int i=p;i<vfb;i++)
a[i]=b[i];
for(int i=vfb;i<vfb+vfc-p;i++)
a[i]=c[i-vfb];
for(int i=vfb;i<vfb+vfc-p;i++)
if(a[i]==x)
{
swap(a[vfb],a[i]);
break;
}
return vfb;
}
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,k);
}
int main()
{
read();
//fout<<part(a,0,n,a[0])<<"\n";
fout<<select(a,0,n,sct-1);
return 0;
}