Pagini recente » Cod sursa (job #1359132) | Cod sursa (job #2507871) | Cod sursa (job #609064) | Cod sursa (job #3001873) | Cod sursa (job #2292998)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sdo.in") ;
ofstream g("sdo.out") ;
int a[300002] , n , nr , i ,k ;
int cautare( int a[] , int st , int dr )
{ int s = st - 1 , d = dr + 1 ;
int pivot = a[ ( st + dr ) / 2 ] ;
while( 1 > 0 )
{
do{
s ++ ;
} while( a[s] < pivot ) ;
do{
d -- ;
}while( a[d] > pivot ) ;
if( s < d )
swap( a[s] , a[d] ) ;
else
return d ;
}
}
void parcurgere( int a[] , int st , int dr , int k )
{
if( st == dr )
return ;
int x = cautare( a , st , dr ) ;
int y = x - st + 1 ;
if ( y >= k )
parcurgere( a , st , x , k ) ;
else
parcurgere( a , x + 1 , dr , k - y ) ;
}
int main() {
f >> n >> k ;
for( int i = 1 ; i <= n ; i ++ )
f >> a[i] ;
parcurgere( a , 1 , n , k ) ;
g << a[k] ;
}