Pagini recente » Cod sursa (job #690209) | Cod sursa (job #2696365) | Cod sursa (job #3171075) | Cod sursa (job #1833333) | Cod sursa (job #659026)
Cod sursa(job #659026)
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 3000002
using namespace std;
int a[ MAX_N ];
int N, K;
void swap( int i, int j ){
int aux = a[ i ];
a[ i ] = a[ j ];
a[ j ] = aux;
}
int partition( int left, int right ){
int i = left - 1, j = right + 1, val = a[ left + rand() % ( right - left + 1 ) ], sw = 1;
while( sw ){
do
i++;
while( a[ i ] < val );
do
j--;
while( a[ j ] > val );
if( i < j )
swap( i, j );
else
return j;
}
}
void quick( int left, int right, int k ){
if( left == right )
return;
int div = partition( left, right), t = div - left + 1;
if( t >= k )
quick( left, div, k );
else
quick( div + 1, right, k - t );
}
int main(){
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d %d", &N, &K );
for( int i = 1; i <= N; ++i )
scanf("%d", &a[ i ] );
quick( 1, N, K );
printf("%d\n",a[K]);
return 0;
}