Pagini recente » Cod sursa (job #781077) | Cod sursa (job #2436587) | Cod sursa (job #1392650) | Cod sursa (job #2650479) | Cod sursa (job #479579)
Cod sursa(job #479579)
# include <algorithm>
using namespace std;
const char FIN[] = "sdo.in", FOU[] = "sdo.out" ;
const int MAX = 3000004 ;
int A[MAX];
int N, K;
int parti ( int * , int , int ) ;
void sdo ( int * , int , int , int ) ;
void read_data ( void ) {
freopen ( FIN, "r", stdin ) ;
scanf ( "%d %d", &N, &K ) ;
for ( int i = 1; i <= N; ++i ) {
scanf ( "%d", A + i ) ;
}
}
int main ( void )
{
read_data () ;
sdo ( A, 1, N, K ) ;
fprintf ( fopen ( FOU, "w" ) , "%d" , A[K] ) ;
}
int parti ( int A[], int st, int dr ) {
int i = st - 1, j = dr + 1, piv = A [ st + ( rand () % ( dr - st + 1 ) ) ] ;
while ( true ) {
for ( ++i ; A[i] < piv; ++i ) ;
for ( --j ; A[j] > piv; --j ) ;
if ( i < j ) {
swap ( A[i], A[j] ) ;
} else {
return j ;
}
}
return 0 ;
}
void sdo ( int A[], int st, int dr, int k )
{
if ( st == dr) {
return ;
}
int q = parti ( A, st, dr ) ;
int t = q - st + 1 ;
if ( t >= k ) {
sdo ( A, st, q, k ) ;
} else {
sdo ( A, q + 1, dr, k - t ) ;
}
}