Pagini recente » Cod sursa (job #1527450) | Cod sursa (job #1226291) | Cod sursa (job #2903707) | Cod sursa (job #3253785) | Cod sursa (job #2290986)
#include <stdio.h>
#include <algorithm>
#include <ctime>
#include <cstdlib>
using namespace std;
typedef long T;
const T NMAX = 3000005;
T N;
T K;
T vec[NMAX];
T partition(T l, T r) {
T ix = l + rand() % ((r + 1) - l);
swap(vec[ix], vec[r]);
T pval = vec[r];
int i = l - 1;
for (int j = l; j < r; ++j) {
if (vec[j] <= pval) {
i++;
swap(vec[i], vec[j]);
}
}
swap(vec[r], vec[i+1]);
return i+1;
}
T quicksort(T l, T r) {
if (l >= r) {
return vec[l];
}
T p = partition(l, r);
if (p == K) {
return vec[p];
}
if (p < K) {
quicksort(p + 1, r);
} else {
quicksort(l, p - 1);
}
}
int main() {
srand(time(0));
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%ld %ld", &N, &K);
for (T i = 1; i <= N; ++i) {
scanf("%ld", &vec[i]);
}
T elm = quicksort(1, N);
printf("%ld ", elm);
fclose(stdin);
fclose(stdout);
return 0;
}