Pagini recente » Cod sursa (job #133499) | Cod sursa (job #2347607) | Cod sursa (job #329389) | Cod sursa (job #139278) | Cod sursa (job #1035073)
#include<stdio.h>
//#include<algorithm>
#include<stdlib.h>
#include<time.h>
using namespace std;
int n,k,v[3000002];
inline void schimb(int &a,int &b)
{
int aux=a;
a=b;
b=aux;
}
int part(int st,int sf)
{
int i=st-1,j=sf+1,poz=v[st+rand()%(sf-st+1)];
while(1)
{
++i;
while(v[i]<poz)
++i;
--j;
while(v[j]>poz)
--j;
if(i<j)
schimb(v[i],v[j]);
else
return j;
}
return 0;
}
void rez(int st,int sf,int k)
{
if(st==sf)
return;
int s=part(st,sf),t=s-st+1;
if(t>=k)
rez(st,s,k);
else
rez(s+1,sf,k-t);
}
int main()
{
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
int i;
scanf("%d%d",&n,&k);
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
srand(time(NULL));
rez(1,n,k);
//nth_element(v+1,v+k,v+1+n);
printf("%d\n",v[k]);
return 0;
}