Pagini recente » Cod sursa (job #241980) | Cod sursa (job #2689745) | Cod sursa (job #2925790) | Cod sursa (job #2757603) | Cod sursa (job #1948290)
#include <ctime>
#include <cstdlib>
#include <cstdio>
using namespace std;
FILE* in;
FILE* 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 = fopen("sdo.in", "r");
out = fopen("sdo.out", "w");
fscanf(in, &n, &K);
for (int i = 1; i <= n; i++) {
fscanf(in, v[i]);
}
srand((int) time(NULL));
sel(1, n, K);
fprintf(out, v[K]);
return 0;
}