Pagini recente » Cod sursa (job #2950814) | Cod sursa (job #1680208) | Cod sursa (job #893525) | Cod sursa (job #2210166) | Cod sursa (job #2891631)
#include<iostream>
#include<fstream>
#include<cstdio>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
const int mx = 3e6 + 100;
int n, k, v[mx];
int partition(int l, int r) {
int rd = rand() % (r - l) + l;
swap(v[rd], v[r]);
int pivot = r;
int index = l;
for (int i = l; i <= r; i++) {
if (v[i] < v[pivot]) {
swap(v[i], v[index]);
index++;
}
}
swap(v[index], v[pivot]);
return index;
}
int kth(int l, int r, int kt) {
int pivot = partition(l, r);
int left = pivot - l;
if (kt - 1 == left) {
return v[pivot];
} else if (kt - 1 < left) {
return kth(l, pivot - 1, kt);
} else {
return kth(pivot + 1, r, kt - left - 1);
}
}
void read() {
in >> n >> k;
for (int i = 0; i < n; i++) {
in >> v[i];
}
}
void solve() {
out << kth(0, n - 1, k);
}
int main() {
read();
solve();
return 0;
}