Pagini recente » Clasament boss_de_boss | Cod sursa (job #2117086) | Clasamentul arhivei de probleme | Cod sursa (job #3190511) | Cod sursa (job #2609882)
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
long long int k, n;
long long int quickselect(long long int v[],long long int len, long long int k)
{
long int pivot = len - 1;
int lo = 0, eq = 0, hi = 0;
long long int *LO = new long long int[len];
long long int *EQ = new long long int[len];
long long int *HI = new long long 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)
return quickselect(LO, lo, k);
else if (k <= lo + eq)
return EQ[0];
else
return quickselect(HI, hi, k - (lo + eq));
}
int main()
{
long long int *v;
f >> n >> k;
v = new long long int[n];
for(long int i = 0; i < n; i++)
f >> v[i];
g << quickselect(v, n, k) << '\n';
}