Pagini recente » Cod sursa (job #405909) | Cod sursa (job #3227250) | Cod sursa (job #1960184) | Cod sursa (job #1701045) | Cod sursa (job #1246585)
#include <stdio.h>
#include <stdlib.h>
#define Nmax 3000005
int v[Nmax];
int n, k;
void read(){
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; ++i)
scanf("%d", &v[i]);
}
void swap(int& a, int& b){
a = (a + b) - (b = a);
}
int part(int l, int r){
int i = l - 1;
int j = r + 1;
int p = v[( rand() % (r - l + 1) + l)];
// printf("%d %d\n", l, r);
while(1){
do{
++i;
} while (v[i] < p);
do{
--j;
} while (v[j] > p);
if (i < j)
swap(v[i], v[j]);
else
return j;
}
return 0;
}
void solve(int l, int r){
if (l == r)
return;
int q = part(l, r);
// int t = q - l + 1;
if (q >= k)
solve(l, q);
else
solve(q + 1, r);
}
int main(){
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
read();
srand(9283475);
solve(1, n);
printf("%d\n", v[k]);
return 0;
}