Pagini recente » Cod sursa (job #1270947) | Cod sursa (job #2118058) | Cod sursa (job #16336) | Cod sursa (job #342015) | Cod sursa (job #3167225)
#include <iostream>
#include <vector>
using namespace std;
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 (i == pivot)
continue;
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) {
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() + 1 == k)
return v[pivot];
if ((int)smallerThanPivot.size() < k) {
return kth_element(greaterThanPivot, k - (int)smallerThanPivot.size() - 1);
}
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;
}