Cod sursa(job #1588706)

Utilizator DysKodeTurturica Razvan DysKode Data 3 februarie 2016 15:20:53
Problema Statistici de ordine Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");

int v[3000001],i,j,n,m,k;

void svap( int &a , int &b )
{
    int aux;
    aux = a;
    a = b;
    b = aux;
return;
}

void solve( int l, int r, int k )
{
    if( l == r )
    {
        fout<<v[ l ];
        return;
    }

    int p = ( l + ( r - l ) / 2 );
    int z = v[ p ];
    int s = l,d = r;

    for( int i = l ; i <= d ; i++ )
    {
        if( v[ i ] > z )
        {
            svap( v[ d-- ] , v[ i ] );
            i--;
        }
    }

    if( v[ p + 1 ] >= v[ p ] )
        svap( v[ p ] , v[ d ] );

    if( k == d )
        fout<<v[ d ];
    else if( k < d )
        solve( l , d - 1 , k );
    else
        solve( d + 1 , r , k );
}

int main()
{

    fin>>n>>k;
    for( i = 1 ; i <= n ; i++ )
    {
        fin>>v[ i ];
    }

    solve( 1 , n , k );

return 0;
}