Pagini recente » Cod sursa (job #2473931) | Cod sursa (job #499994) | Cod sursa (job #2604025) | Cod sursa (job #683779) | Cod sursa (job #2330302)
#include <fstream>
const int NMAX = 3000005;
int n, k, a[NMAX];
std::ifstream in("sdo.in");
std::ofstream out("sdo.out");
int partition(int left, int right, int pivot) {
int pivotVal = a[pivot];
std::swap(a[pivot], a[right]);
int index = left;
for (int i = left; i < right; ++i)
if (a[i] < pivotVal)
std::swap(a[index++], a[i]);
std::swap(a[right], a[index]);
return index;
}
int select(int left, int right, int k) {
if (left == right)
return a[left];
int pivot = partition(left, right, (right + left) / 2);
if (k == pivot)
return a[k];
return (k < pivot) ? select(left, pivot - 1, k) : select(pivot + 1, right, k);
}
int main() {
in >> n >> k;
for (int i = 1; i <= n; ++i)
in >> a[i];
out << select(1, n, k);
return 0;
}