Pagini recente » Cod sursa (job #1960918) | Cod sursa (job #1936408) | Cod sursa (job #725883) | Cod sursa (job #2145590) | Cod sursa (job #2617661)
#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;
}