Pagini recente » Cod sursa (job #1121502) | Cod sursa (job #2461623) | Cod sursa (job #1635016) | Cod sursa (job #2900912) | Cod sursa (job #1849560)
#include <cstdio>
#include <queue>
using namespace std;
const int N = 3000009;
int a [N];
int part(int st, int dr){
int aux, m, p, i, j;
m = (st + dr) / 2;
p = a [m];
i = st - 1;
j = dr + 1;
while (1){
do {++i;}while(a [i] < p);
do {--j;}while(a [j] > p);
if (i < j) {
aux = a [i];
a [i] = a [j];
a [j] = aux;
}
else return j;
}
}
void quick(int st, int dr, int k){
int m, sp;
if (st < dr){
sp = part(st, dr);
if (sp - st + 1 >= k)
quick(st, sp, k);
else
quick(sp + 1, dr, k - sp + st - 1);
}
}
int main(){
int n, i, k;
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d%d", &n, &k);
for (i = 1; i <= n; i++)
scanf("%d", &a [i]);
quick(1, n, k);
printf("%d\n", a [k]);
return 0;
}