Pagini recente » Cod sursa (job #3350434) | Cod sursa (job #3353162) | Monitorul de evaluare | Cod sursa (job #3345202) | Cod sursa (job #3345533)
#include <fstream>
#include <vector>
#include <ctime>
std::ifstream fin("sdo.in");
std::ofstream fout("sdo.out");
int n, k;
int a[3000005];
int QuickSelect(int st, int dr, int k) {
if (st == dr) return a[st];
int pivotIdx = st + rand() % (dr - st + 1);
std::swap(a[pivotIdx], a[dr]);
int pivot = a[dr];
int i = st;
for (int j = st; j < dr; j++) {
if (a[j] <= pivot) {
std::swap(a[i], a[j]);
i++;
}
}
std::swap(a[i], a[dr]);
if (i == k) return a[i];
if (i > k) return QuickSelect(st, i - 1, k);
else return QuickSelect(i + 1, dr, k);
}
int main() {
std::ios_base::sync_with_stdio(false);
fin.tie(NULL);
srand(time(0));
fin >> n >> k;
for (int i = 1; i <= n; i++) {
fin >> a[i];
}
fout << QuickSelect(1, n, k) << "\n";
return 0;
}