Pagini recente » Cod sursa (job #1233654) | Cod sursa (job #786734) | Cod sursa (job #3232642) | Cod sursa (job #1606392) | Cod sursa (job #2277631)
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#define nmax 3000005
using namespace std;
int n,k,v[nmax];
int part(int a[],int st,int dr)
{
int i= st -1 , j= dr +1;
int p=a[ st+ rand()% (dr- st + 1) ];
while(1) {
do {
i++;
} while (a[i]< p);
do {
j++;
} while (a[j]> p);
if (i>=j)
return j;
swap(a[i],a[j]);
}
}
int sel(int a[], int st, int dr, int k)
{
if (st == dr)
return a[st];
int q= part(a, st, dr);
int t= q - st +1;
if (t >= k)
sel(a, st, q, k);
else
sel(a, q+1, dr, k-t);
}
int main()
{
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
srand(time(NULL));
scanf("%d %d", &n, &k);
for (int i = 1; i<=n; i++)
scanf("%d", &v[i]);
printf("%d",sel(v,1,n,k));
return 0;
}