Pagini recente » Cod sursa (job #2206503) | Cod sursa (job #2066761) | Cod sursa (job #498175) | Cod sursa (job #2401904) | Cod sursa (job #2330299)
#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]);
++index;
}
}
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];
if (k < pivot)
return select(left, pivot - 1, k);
return select(pivot + 1, right, k);
}
int main() {
srand(time(NULL));
in >> n >> k;
for (int i = 1; i <= n; ++i)
in >> a[i];
out << select(1, n, k);
return 0;
}