Cod sursa(job #2607574)

Utilizator AlexVulpoiuAlexandru Vulpoiu AlexVulpoiu Data 29 aprilie 2020 21:36:18
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <cstdlib>

using namespace std;

ifstream f("sdo.in");
ofstream g("sdo.out");

int n, k, i, w1[3000005], w2[3000005], w3[3000005];

int quickselect(int v[3000005], int lg)
{
    int m1, m2, m3, i, p, x;

    p = rand() % lg;
    x = v[p];
    m1 = m2 = m3 = 0;
    for(i = 0; i < lg; i++)
        if(v[i] < x)
            w1[m1++] = v[i];
        else
            if(v[i] == x)
                w2[m2++] = v[i];
            else
                w3[m3++] = v[i];
    if(k <= m1)
        return quickselect(w1, m1);
    else
        if(k <= m1 + m2)
            return w2[0];
        else
        {
            k -= (m1 + m2);
            return quickselect(w3, m3);
        }
}

int main()
{
    f >> n >> k;
    for(i = 0; i < n; i++)
        f >> w1[i];
    f.close();

    g << quickselect(w1, n) << '\n';
    g.close();

    return 0;
}