Pagini recente » Cod sursa (job #121385) | Cod sursa (job #2912674) | Cod sursa (job #3282889) | Cod sursa (job #695768) | Cod sursa (job #872024)
Cod sursa(job #872024)
#include <fstream>
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
static int part(vector<int>& v, int infL, int supL) {
int i = infL, j = supL, p = v[rand() % (supL - infL + 1) + infL];
while (1) {
for (; v[i] < p; i++);
for (; p < v[j]; j--);
if (i < j) {
v[i] ^= v[j];
v[j] ^= v[i];
v[i] ^= v[j];
} else {
return j;
}
}
return 0;
}
static void select(vector<int>& v, int infL, int supL, int k) {
if (infL == supL)
return;
int pivot = part(v, infL, supL);
if (pivot >= k)
select(v, infL, pivot, k);
else
select(v, pivot + 1, supL, k);
}
int kth_min(vector<int>& v, int k) {
select(v, 0, v.size() - 1, k);
return v[k];
}
int main(void) {
//read data
vector <int> v;
int n, k;
ifstream f("sdo.in");
f >> n >> k;
k--;
for (int i = 0; i < n; i++) {
int val;
f >> val;
v.push_back(val);
}
f.close();
//Print results
ofstream g("sdo.out");
g << kth_min(v, k) << '\n';
g.close();
return 0;
}