Cod sursa(job #2617661)

Utilizator UtilizatorGBGeorge Bodea UtilizatorGB Data 22 mai 2020 16:09:05
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <random>
#include <fstream>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int mai_mici[3000001], egale[3000001], mai_mari[3000001];

int returnare_poz_cool(int l) {
    int poz1 = rand()%l;
    int poz2 = rand()%l;
    int poz3 = rand()%l;
    if ((poz1 <= poz2 && poz2 <= poz3) || (poz1 >= poz2 && poz2 >= poz3))
        return poz2;
    else if ((poz2 <= poz1 && poz1 <= poz3) || (poz2 >= poz1 && poz1 >= poz3))
        return poz1;
    else
        return poz3;
}

int qk( int v_curent[], int nr, int cauta){
    int l=0, e=0, h=0;
    int pivot = returnare_poz_cool(nr);
    int element = v_curent[pivot];

    for ( int i = 0; i < nr; i++ ){
        if ( v_curent[i] < element ){
            mai_mici[l] = v_curent[i];
            l++;
        }
        else if( v_curent[i] == element){
            egale[e] = v_curent[i];
            e++;
        }
        else{
            mai_mari[h] = v_curent[i];
            h++;
        }
    }
    if ( cauta <=l )
        qk(mai_mici, l, cauta);
    else if ( cauta>l && cauta <=l+e )
        return egale[0];
    else {
        cauta-=(l+e);
        qk(mai_mari, h, cauta);
    }
}

int main(){
    int n, k;
    f >> n >> k;
    for( int i=0; i<n; i++ )
        f >> mai_mici[i];
    int statistica = qk(mai_mici, n, k);
    g << statistica;
    return 0;
}