Pagini recente » Cod sursa (job #1791895) | Cod sursa (job #1753753) | Cod sursa (job #1383985) | Cod sursa (job #1175283) | Cod sursa (job #1259769)
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std;
int partition(vector<int>& values, int left, int right) {
int poz = left + (rand() % (right - left + 1));
swap(values[poz], values[right]);
poz = right;
for (int i = left; i < poz; ++i)
if (values[i] > values[poz]) {
swap(values[i], values[poz-1]);
swap(values[poz], values[poz-1]);
poz--;
i--;
}
return poz;
}
void find_kth(vector<int>& values, int left, int right, int k) {
if (right - left >= 1) {
int poz = partition(values, left, right);
int t = poz - left + 1;
if (t >= k)
find_kth(values, left, poz, k);
else
find_kth(values, poz+1, right, k-t);
}
}
int main() {
srand(time(NULL));
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int N, K, x;
vector<int> values;
fin >> N >> K;
for (int i = 0; i < N; ++i) {
fin >> x;
values.push_back(x);
}
find_kth(values, 0, values.size()-1, K);
fout << values[K-1] << '\n';
fin.close();
fout.close();
return 0;
}