Pagini recente » Cod sursa (job #1307447) | Statistici Florin (BucataruFlorin) | Cod sursa (job #740066) | Cod sursa (job #2018561) | Cod sursa (job #396089)
Cod sursa(job #396089)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define NMAX 3000002
int n,k,A[NMAX];
void read()
{
scanf("%d%d",&n,&k);
int i;
for (i=1; i<=n; i++)
scanf("%d",&A[i]);
}
int part(int A[NMAX],int st,int dr)
{
int i=st-1,j=dr+1,p=A[st+(rand()%(dr-st+1))],t;
while (1)
{
do
{
++i;
}
while (A[i]<p);
do
{
--j;
}
while (A[j]>p);
if (i<j)
t=A[i],A[i]=A[j],A[j]=t;
else
return j;
}
}
void select(int A[NMAX],int st,int dr,int k)
{
if (st==dr)
return ;
int x=part(A,st,dr);
int act=x-st+1;
if (act>=k)
select(A,st,x,k);
else
select(A,x+1,dr,k-act);
}
int main()
{
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
read();
srand(time(NULL));
select(A,1,n,k);
printf("%d\n",A[k]);
return 0;
}