Pagini recente » Istoria paginii runda/taekwondo/clasament | Cod sursa (job #147844) | Cod sursa (job #2684043) | Cod sursa (job #3125945) | Cod sursa (job #3295989)
#include <bits/stdc++.h>
#define ll long long
#define ii pair<int, int>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int generate_random(int start, int end) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(start, end);
return dis(gen);
}
int get_pivot_position(vector<int> &a, int l, int r) {
int pivot = generate_random(l, r);
swap(a[pivot], a[r]);
int idx = l;
for (int i = l; i < r; ++i) {
if (a[i] < a[r]) {
swap(a[i], a[idx]);
idx++;
}
}
swap(a[r], a[idx]);
return idx;
}
int get_i_smallest(vector<int> &a, int l, int r, int i) {
if (l >= r) {
return a[l];
}
int pivot_pos = get_pivot_position(a, l, r);
int local_ord = pivot_pos - l + 1;
if (local_ord == i) {
return a[pivot_pos];
} else if (local_ord < i) {
return get_i_smallest(a, pivot_pos + 1, r, i - local_ord);
}
return get_i_smallest(a, l, pivot_pos - 1, i);
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr);
int n, k;
fin >> n >> k;
vector<int> a(n + 1);
for (int i = 1; i <= n; ++i) {
fin >> a[i];
}
fout << get_i_smallest(a, 1, n, k) << '\n';
return 0;
}