Pagini recente » Cod sursa (job #2894309) | Cod sursa (job #2031404) | Cod sursa (job #2001405) | Cod sursa (job #465472) | Cod sursa (job #796215)
Cod sursa(job #796215)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define NMAX 3000005
int n,k,A[NMAX],B[NMAX],r,t;
int solve(int st,int dr)
{
if (st==dr)
return A[st];
int i,poz=rand()%(dr-st+1)+st,val=A[poz];
r=t=0;
for (i=st; i<=dr; i++)
if (A[i]<val)
B[++r]=A[i];
for (i=st; i<=dr; i++)
if (A[i]>val)
B[++t+r]=A[i];
for (i=1; i<=r; i++)
A[st+i-1]=B[i];
for (i=st+r; i<=dr-t; i++)
A[i]=val;
for (i=1; i<=t; i++)
A[dr-t+i]=B[r+i];
if (k<=r)
return solve(st,st+r-1);
k-=r;
if (k<=dr-st+1-r-t)
return val;
k-=dr-st+1-r-t;
return solve(dr-t+1,dr);
}
int main()
{
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
srand(time(0));
scanf("%d%d",&n,&k);
int i;
for (i=1; i<=n; i++)
scanf("%d",&A[i]);
printf("%d\n",solve(1,n));
return 0;
}