Pagini recente » Cod sursa (job #2394360) | Cod sursa (job #953227) | Cod sursa (job #2522403) | Cod sursa (job #840295) | Cod sursa (job #3167214)
#include <iostream>
using namespace std;
const int NMAX = 3 * 1e6;
pair<vector<int>, vector<int> > partitioning(vector<int> v, int pivot) {
vector<int> smallerThanPivot, greaterThanPivot;
for (int i = 0; i < (int)v.size(); i++)
if (v[i] < v[pivot])
smallerThanPivot.push_back(v[i]);
else
greaterThanPivot.push_back(v[i]);
return make_pair(smallerThanPivot, greaterThanPivot);
}
int kth_element(vector<int> v, int k) {
if (k == 1)
return v[0];
int pivot = (int)v.size() / 2;
pair<vector<int>, vector<int> > partitioned = partitioning(v, pivot);
vector<int> smallerThanPivot = partitioned.first;
vector<int> greaterThanPivot = partitioned.second;
if ((int)smallerThanPivot.size() < k) {
return kth_element(greaterThanPivot, k - (int)smallerThanPivot.size());
}
return kth_element(smallerThanPivot, k);
}
int main()
{
FILE *fin, *fout;
fin = fopen("sdo.in", "r");
fout = fopen("sdo.out", "w");
int n, k, ans, x;
vector<int> v;
fscanf(fin, "%d %d", &n, &k);
for (int i = 0; i < n; i++) {
fscanf(fin, "%d", &x);
v.push_back(x);
}
ans = kth_element(v, k);
fprintf(fout, "%d\n", ans);
fclose(fin);
fclose(fout);
return 0;
}