Pagini recente » Cod sursa (job #2317310) | Cod sursa (job #2098896) | Cod sursa (job #1670582) | Cod sursa (job #688893) | Cod sursa (job #479582)
Cod sursa(job #479582)
# include <fstream>
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 ) {
ifstream f ( FIN ) ;
f >> N >> K ;
for ( int i = 1; i <= N; ++i ) {
f >> A[i] ;
}
}
int main ( void )
{
read_data () ;
sdo ( A, 1, N, K ) ;
ofstream g ( FOU ) ;
g << 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 ) ;
}
}