Pagini recente » Cod sursa (job #1156022) | Cod sursa (job #3166693) | Cod sursa (job #392163) | Cod sursa (job #640352) | Cod sursa (job #2609376)
#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("sdo.out");
int n, pozitie;
f >> n >> pozitie;
for( int i = 0; i < n; ++i )
f >> L[i];
g << quickselect(L, n, pozitie) << '\n';
}