Cod sursa(job #462335)

Utilizator BitOneSAlexandru BitOne Data 10 iunie 2010 15:03:29
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <iterator>
#define MAX_N 3000011

/*
 *
 */
using namespace std;
int v[MAX_N];
inline void OrderStatistic( int left, int right, int k )
{
    if( left < right )
    {
        int lleft=left-1, rright=right+1, pValue=v[ left+rand()%(right-left+1) ];
        while( true )
        {
            while( pValue > v[++lleft] );
            while( pValue < v[--rright] );
            if( lleft > rright )
                break;
            swap( v[lleft], v[rright] );
        }
        if( rright >= k )
            OrderStatistic( left, rright, k  );
        else OrderStatistic( rright+1, right, k );
    }
}
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" );
    OrderStatistic( 1, N, k );
    out<<v[k]<<'\n';
    return EXIT_SUCCESS;
}