Cod sursa(job #2609373)

Utilizator Zamfirescuste2Zamfirescu Stefan Zamfirescuste2 Data 2 mai 2020 15:04:15
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <random>
using namespace std;

int L[3000001], E[3000001], H[3000001]; 
// in vectorul L se pun elementele mai mici decat pivot
// in vectorul E se pun elementele egale cu pivotul
// in vectorul H se pun elementele mai mare decat pivotul
int quickselect( int v[],int len, int pozitie){
    
    int pivot = rand() % len;
    int element = v[pivot];

    int l, e, h;
    l = e = h = 0;

    for ( int i = 0; i < len; ++i ){
        if ( v[i] < element )
            L[l++] = v[i];
        else
            if( v[i] == element)
                E[e++] = v[i];
            else
                H[h++] = v[i];
    } 
    if ( pozitie <= l )
        quickselect(L, l, pozitie);
    else
        if ( pozitie <= l + e )
            return E[0];
        else{
            pozitie = pozitie - (l + e );
            quickselect(H,h,pozitie);
        }
}

int main(){
    ifstream f("sdo.in");
    ofstream g("std.out");

    int n, pozitie;
    f >> n >> pozitie;

    for( int i = 0; i < n; ++i )
        f >> L[i];
    g << quickselect(L, n, pozitie) << '\n';
}