Pagini recente » Cod sursa (job #1416711) | Cod sursa (job #472810) | Cod sursa (job #3268437) | Cod sursa (job #2581600) | Cod sursa (job #689241)
Cod sursa(job #689241)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int part(vector<int> &v, int infL, int supL) {
int i = infL, j = supL, p = v[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;
}
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(const vector<int>& v, int k) {
vector <int> localv = v;
select(localv, 0, localv.size() - 1, k);
return localv[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;
}