Pagini recente » Cod sursa (job #3161685) | Cod sursa (job #2858412) | Cod sursa (job #2061592) | Cod sursa (job #298826) | Cod sursa (job #483736)
Cod sursa(job #483736)
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<algorithm>
using namespace std;
const int Nmax = 300001;
int part(int st, int dr, int A[]) {
int val, j=st-1, pivot=st+rand()%(dr-st+1), i;
swap(A[pivot],A[dr]);
val=A[dr];
for(i=st; i<=dr; i++)
if(A[i]<=val)
swap(A[++j],A[i]);
return j;
}
int sel(int st, int dr, int k, int A[]) {
int x=part(st,dr,A);
if(x==k)
return A[k];
if(x<k)
return sel(x+1,dr,k,A);
return sel(st,x-1,k,A);
}
int main() {
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
int A[Nmax], n, i, k;
srand(time(0));
scanf("%d %d",&n,&k);
for(i=1; i<=n; i++)
scanf("%d",&A[i]);
printf("%d\n",sel(1,n,k,A));
return 0;
}