Cod sursa(job #2625021)

Utilizator mihai_radulescuMihai Radulescu mihai_radulescu Data 5 iunie 2020 17:52:50
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <random>
#include <ctime>

using namespace std;

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

int n, k, low[3000005], eql[3000005], high[3000005];

int quick_select(int n, int k, int v[])
{
    int pivot = rand()%n;
    int x = v[pivot];

    int len_l=0,len_e=0, len_h=0;

    for(int i=0; i<n; i++)
    {
        if(v[i] < x)
        {
            low[len_l] = v[i];
            len_l++;
        }
        else if(v[i] == x)
        {
            eql[len_e] = v[i];
            len_e++;
        }
        else
        {
            high[len_h] = v[i];
            len_h++;
        }
    }

    if (k <= len_l)
        quick_select(len_l, k, low);
    else
        if (k <= len_l+len_e)
            return eql[0];
        else
        {
            k = k-(len_l+len_e);
            quick_select(len_h, k, high);
        }
}
int main()
{
    f >> n >> k;

    for(int i=0; i<n; i++)
        f >> high[i];

    int val = quick_select(n, k, high);

    g<<val;
}