Pagini recente » Istoria paginii runda/20_februarie_simulare_oji_2024_clasa_9/clasament | Cod sursa (job #1962121) | Cod sursa (job #1314143) | Cod sursa (job #2277141) | Cod sursa (job #1521326)
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream f ("sdo.in");
ofstream g ("sdo.out");
const int NMAX = 3000000 + 1;
int n, k;
int v[NMAX];
void citeste() {
f >> n >> k;
for (int i = 1; i <= n; i++)
f >> v[i];
}
int kth_element(int st, int dr, int k) {
if (st == dr) return v[st];
int p = rand() % (dr - st) + st + 1;
int x = v[p];
int i = st, j = dr;
int mai_mici;
while (i <= j) {
while (v[i] < x) i++;
while (v[j] > x) j--;
if (i <= j) {
swap(v[i], v[j]);
i++;
j--;
}
}
mai_mici = j - st + 1;
if (mai_mici >= k) return kth_element(st, j, k);
return kth_element(j + 1, dr, k - mai_mici);
}
int main() {
citeste();
g << kth_element(1, n, k) << '\n';
return 0;
}