Pagini recente » Cod sursa (job #1869567) | Cod sursa (job #143490) | Cod sursa (job #2183567) | Cod sursa (job #2956121) | Cod sursa (job #1038448)
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
const int MAXN = 300005;
int N, v[MAXN], K;
vector<int> ind;
void QSort(vector<int> numere, int st)
{
long long num = numere.size();
if (num == 1)
g << v[numere[0]] << '\n';
else if (num > 1)
{
vector<int> stanga, dreapta;
int pivot = rand() % num;
for (int i = 0; i < num; ++i)
{
if (v[numere[i]] < v[numere[pivot]]) stanga.push_back(numere[i]);
else if (v[numere[i]] >= v[numere[pivot]]) dreapta.push_back(numere[i]);
}
if (st + stanga.size() >= K)
QSort(stanga, st), dreapta.clear();
else
QSort(dreapta, st + stanga.size()), stanga.clear();
}
}
int main()
{
srand(time(NULL));
f >> N >> K;
ind.resize(N);
for (int i = 0; i < N; ++i)
f >> v[i], ind[i] = i;
QSort(ind, 0);
f.close();
g.close();
return 0;
}