Pagini recente » Cod sursa (job #2257477) | Cod sursa (job #2299468) | Cod sursa (job #67394) | Cod sursa (job #3200637) | Cod sursa (job #1948298)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
const int MAXN = 3000001;
int n, K, v[MAXN];
int part(int li, int lf) {
int i = li, j = lf, p = v[li + (rand() % (lf - li + 1))];
while (1) {
while (v[i] < p) {
i++;
}
while (p < v[j]) {
j--;
}
if (i < j) {
swap(v[i], v[j]);
} else {
return j;
}
}
return 0;
}
void sel(int li, int lf, int k) {
if (li >= lf) {
return;
}
int q = part(li, lf);
int t = q - li + 1;
if (t >= k) {
sel(li, q - 1, k);
} else {
sel(q + 1, lf, k - t);
}
}
int main(int argc, const char * argv[]) {
in >> n >> K;
for (int i = 1; i <= n; i++) {
in >> v[i];
}
srand((int) time(NULL));
sel(1, n, K);
out << v[K] << '\n';
return 0;
}