Pagini recente » Borderou de evaluare (job #1246246) | Cod sursa (job #1247793)
#include <iostream>
#include <cstdio>
using namespace std;
int N,K, a[3000050], res;
void find_kth(int k, int r){
int mid=(1+r)/2,i,rnk=0,t=0;
for (i=1; i<=r; i++)
if (a[i]<a[mid])
rnk++;
if (rnk==k-1){
res=a[mid];
return;
}
if (rnk>k-1){
for (i=1; i<=r; i++)
if (a[i]<a[mid])
a[++t]=a[i];
find_kth(k,t);
return;
}
for (i=1; i<=r; i++)
if (a[i]>a[mid])
a[++t]=a[i];
find_kth(k-rnk-1,t);
}
int main(){
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d %d\n",&N,&K);
int i;
for (i=1; i<=N; i++)
scanf("%d",&a[i]);
find_kth(K,N);
printf("%d",res);
return 0;
}