Pagini recente » Cod sursa (job #718543) | Cod sursa (job #62236) | Cod sursa (job #1749390) | Cod sursa (job #2886476) | Cod sursa (job #2079856)
#include <bits/stdc++.h>
using namespace std;
size_t partition(vector< int >& values, size_t left, size_t right) {
size_t pivot_position = left + rand() % (right - left + 1);
swap(values[left], values[pivot_position]);
for (int di = 0, dj = -1; (int)left < (int)right; left += di, right += dj) {
if (values[left] > values[right]) {
swap(values[left], values[right]);
swap(di, dj);
di *= -1; dj *= -1;
}
}
return left;
}
void solve() {
size_t size, position;
cin >> size >> position;
position--;
vector< int > values(size);
for (auto& it : values)
cin >> it;
size_t left = 0, right = size - 1;
while (left <= right) {
size_t middle = partition(values, left, right);
if (middle == position) {
cout << values[middle] << endl;
return;
}
if (middle > position)
right = middle - 1;
else
left = middle + 1;
}
cout << values[position] << endl;
}
int main() {
assert(freopen("sdo.in", "r", stdin));
assert(freopen("sdo.out", "w", stdout));
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
solve();
return 0;
}