Cod sursa(job #2613872)

Utilizator ddeliaioanaaDumitrescu Delia Ioana ddeliaioanaa Data 10 mai 2020 19:45:13
Problema Statistici de ordine Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

std::ifstream fin("sdo.in");
std::ofstream fout("sdo.out");

int n, k;
std::vector <int> v;

int quickSelect(std::vector<int> v, int k)
{
    std::vector <int> L;
    std::vector <int> E;
    std::vector <int> G;
    int pivot = v[rand() % v.size()];

    for(int i = 0; i < v.size(); i ++)
        if(v[i] < pivot)
            L.push_back(v[i]);
        else if(v[i] == pivot)
            E.push_back(v[i]);
        else
            G.push_back(v[i]);

    if(k <= L.size())
        return quickSelect(L, k);
    else if(k <= L.size() + E.size())
        return E[0];
    else
        return quickSelect(G, k - L.size() - E.size());
}

int main()
{
    int i, val;
    fin >> n >> k;

    for(i = 0; i < n; i++)
    {
        fin >> val;
        v.push_back(val);
    }

    fout << quickSelect(v, k);

    return 0;
}