Pagini recente » Cod sursa (job #645132) | Cod sursa (job #2095882) | Borderou de evaluare (job #2751330) | Cod sursa (job #631002) | Cod sursa (job #2537102)
#include <cstdio>
#include <algorithm>
#include <ctime>
using namespace std;
int v[3000010];
int random(int a,int b)
{
return a+(1LL*rand()*rand())%(b-a+1);
}
void al_k_lea_min(int k,int st,int dr)
{
if(st>=dr) return;
int i=st,j=dr,a=v[random(st,dr)];
while(i<=j)
{
while(v[i]<a) i++;
while(v[j]>a) j--;
if(i<=j)
{
swap(v[i],v[j]);
i++;
j--;
}
}
if(k<=j-st+1) al_k_lea_min(k,st,j);
else al_k_lea_min(k-(j-st+1),j+1,dr);
}
int main()
{
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
int n,k;
srand(time(0));
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
al_k_lea_min(k,1,n);
printf("%d",v[k]);
return 0;
}