Pagini recente » Cod sursa (job #3165723) | Clasament 795353277152115444 | Borderou de evaluare (job #2247376) | Cod sursa (job #2345011) | Cod sursa (job #2609889)
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int k, n;
int quickselect(int v[],int len, int k)
{
long int pivot = len - 1;
int lo = 0, eq = 0, hi = 0;
int *LO = new int[len];
int *EQ = new int[len];
int *HI = new int[len];
for (int i = 0; i < len; i++)
{
if (v[i] < v[pivot])
{
LO[lo] = v[i];
lo++;
}
else if(v[i] == v[pivot])
{
EQ[eq] = v[i];
eq++;
}
else
{
HI[hi] = v[i];
hi++;
}
}
if (k <= lo)
{
delete[] HI, LO;
return quickselect(LO, lo, k);
}
else if (k <= lo + eq)
return EQ[0];
else
{
delete[] LO, EQ;
return quickselect(HI, hi, k - (lo + eq));
}
int main()
{
int *v;
f >> n >> k;
v = new int[n];
for(int i = 0; i < n; i++)
f >> v[i];
g << quickselect(v, n, k) << '\n';
}