Pagini recente » Cod sursa (job #1850647) | Cod sursa (job #2442500) | Cod sursa (job #2191099) | Cod sursa (job #2989911) | Cod sursa (job #2908633)
#include <iostream>
#include <random>
#include <fstream>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
const int dim = 3e6 + 6;
int n, vec[dim], sdo;
int Partition(int st, int dr) {
int index = st + rand() % (dr - st + 1);
swap(vec[dr], vec[index]);
int pivot = dr;
int k = st;
for (int i = st; i <= dr; i++) {
if (vec[i] < vec[pivot]) {
swap(vec[i], vec[k]);
k++;
}
}
swap(vec[k], vec[pivot]);
return k;
}
int quickselect(int sdo, int st, int dr) {
int poz = Partition(st, dr);
if (poz == sdo) return vec[poz];
else if (poz > sdo) return quickselect(sdo, st, poz - 1);
else return quickselect(sdo, poz + 1, dr);
}
int main() {
srand(time(NULL));
in >> n >> sdo;
for (int i=1; i<=n; i++) {
in >> vec[i];
}
out << quickselect(sdo, 1, n);
return 0;
}