Pagini recente » Cod sursa (job #299736) | Cod sursa (job #1210278) | Cod sursa (job #2803375) | Cod sursa (job #1123070) | Cod sursa (job #616980)
Cod sursa(job #616980)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N_MAX 3000010
int V[N_MAX];
int n, k;
inline void swap(int &x, int &y) {
int z = x; x = y; y = z;
}
int split(int st, int dr) {
int i = st-1, j = dr+1;
int piv = V[rand()%(dr-st+1)+st-1];
while(1) {
i++;
j--;
while(V[i] < piv) i++;
while(V[j] > piv) j--;
if(i < j) swap(V[i], V[j]);
else return j;
}
return 0;
}
void sdo(int st, int dr, int k) {
if(st >= dr) return;
int q = split(st, dr);
// printf("--->apel %d %d\n", st, dr);
// printf("%d\n", q-st+1);
if(k <= q-st+1) sdo(st, q, k);
else sdo(q+1,dr, k - (q-st+1));
}
int main() {
srand(time(NULL));
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; ++i)
scanf("%d", &V[i]);
sdo(1, n, k);
printf("%d\n", V[k]);
return 0;
}