Pagini recente » Cod sursa (job #2402456) | Monitorul de evaluare | Clasament dupa rating | Cod sursa (job #130743) | Cod sursa (job #1733079)
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std ;
ifstream f ("sdo.in") ;
ofstream g ("sdo.out") ;
int v[3000003] , n , k ;
int quickSelect ( int st , int dr , int k )
{
if ( st == dr ) //interval de un singur numar
return v[st] ;
int i = st , j = dr ;
int pivot = v[rand() % (dr - st + 1) + st] ; //alegem un pivot situat inre stanga si dreapta aleator
while ( i <= j )
{
while ( v[i] < pivot )
++i ;
while ( v[j] > pivot )
--j ;
if ( i <= j )
{
swap ( v[i] , v[j] ) ;
++i , --j ;
}
}
if ( k <= ( j - st + 1 ) )
return quickSelect ( st , j , k ) ;
else
return quickSelect ( j + 1, dr , k - ( j - st + 1 ) ) ;
}
int main()
{
f >> n >> k ;
for ( int i = 1 ; i <= n ; ++i )
f >> v[i] ;
srand(time(0)) ; //alegem aleator
g << quickSelect ( 1, n , k ) ;
return 0;
}