Pagini recente » Cod sursa (job #2198455) | Cod sursa (job #2805737) | Cod sursa (job #341015) | Cod sursa (job #19623) | Cod sursa (job #394151)
Cod sursa(job #394151)
/*
* File: main.cpp
* Author: virtualdemon
*
* Created on February 10, 2010, 4:55 PM
*/
#include <ctime>
#include <fstream>
#include <cstdlib>
#include <iterator>
#define Nmax 3000001
/*
*
*/
using namespace std;
int v[Nmax];
inline void swap( int& x, int& y )
{
int aux=x;
x=y;
y=aux;
}
int Partition( int left, int right )
{
int x=v[right], i, j;
for( i=left-1, j=left; j < right; ++j )
{
if( v[j] <= x )
{
++i;
swap( v[j], v[i] );
}
}
swap( v[i+1], v[right] );
return i+1;
}
inline int RandomP( int left, int right )
{
int i=left+rand()%(right-left+1);
swap( v[i], v[right] );
return Partition( left, right );
}
inline int Select( int left, int right, int k )
{
if( left == right )
return v[left];
int p=RandomP( left, right ), length=p-left+1;
if( p == k )
return v[p];
if( k < length )
return Select( left, p-1, k );
else return Select( p+1, right, k-length );
}
int main( void )
{srand( time(NULL) );
int n, k;
ifstream in("sdo.in");
in>>n>>k;
copy( istream_iterator<int>(in), istream_iterator<int>(), v+1 );
ofstream out("sdo.out");
out<<Select( 1, n, k );
return 0;
}