Pagini recente » Cod sursa (job #1244819) | Istoria paginii runda/infonatafleata/clasament | Cod sursa (job #722653) | Istoria paginii runda/dutzpalacsinta/clasament | Cod sursa (job #1463231)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream fin ("sdo.in") ;
ofstream fout ("sdo.out") ;
int N , K ;
int a[3000001] ;
void Citire ()
{
fin >> N >> K ;
for ( int i = 1 ; i <= N ; ++ i )
fin >> a[i] ;
}
int partitioneaza ( int a[] , int st , int dr )
{
int i = st , j = dr ;
int r = a[ st + rand () % ( dr - st + 1 ) ] ;
while ( i < j )
{
while ( a[i] < r && i < dr )
++ i ;
while ( a[j] > r && j > st )
-- j ;
if ( i <= j )
swap ( a[i] , a[j] ) , -- i , -- j ;
}
return j ;
}
void SDO ( int a[] , int st , int dr , int K )
{
if ( st == dr )
return ;
int q = partitioneaza( a , st , dr ) ;
int t = q - st + 1 ;
if ( t >= K )
SDO ( a , st , q , K ) ;
else
SDO ( a , q + 1 , dr , K - t ) ;
}
int main()
{
srand ( time ( NULL ) ) ;
Citire () ;
SDO ( a , 1 , N , K ) ;
fout << a[K] ;
return 0;
}