Pagini recente » Cod sursa (job #3156352) | Cod sursa (job #2779741) | Cod sursa (job #780095) | Cod sursa (job #1656061) | Cod sursa (job #2864935)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
int N, K;
int v[3000001];
int partition(int left, int right) {
int pivot = v[left + rand() % (right - left)];
int i = left - 1, j = right + 1;
while (true) {
do
++i;
while (v[i] < pivot);
do
--j;
while (v[j] > pivot);
if (i >= j)
break;
std::swap(v[i], v[j]);
}
return j;
}
void kth_element(int left, int right) {
if (left < right) {
int i = partition(left, right);
if (i >= K)
kth_element(left, i);
else
kth_element(i + 1, right);
}
}
int main() {
std::ifstream in("sdo.in");
in >> N >> K;
for (int i = 0; i < N; ++i)
in >> v[i];
srand(time(NULL));
kth_element(0, N - 1);
std::ofstream out("sdo.out");
out << v[K - 1];
}