Cod sursa(job #3173980)

Utilizator vladimir.gavris.1Gavris Mihai Vladimir vladimir.gavris.1 Data 24 noiembrie 2023 08:15:12
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
// quicksort
#include <fstream>
#include <algorithm>

using namespace std;

#define MAXN 3000000

int a[ MAXN ];

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

int kth_element( int bg, int nd, int k )
{
    if( bg == nd )
    {
        return a[ bg ] ;
    }

    int pivot, left, right, aux;
    pivot = a[ bg + rand() % ( nd - bg + 1 ) ];
    left = bg - 1;
    right = nd + 1;

    while( left < right )
    {
        do
        {
            left++;
        }
        while( a[ left ] < pivot );

        do
        {
            right--;
        }
        while( a[ right ] > pivot );

        if( left < right )
        {
            aux = a[ left ];
            a[ left ] = a[ right ];
            a[ right ] = aux;
        }
    }

    int as = right - bg + 1;

    if( as >= k )
    {
        return kth_element( bg, right, k );
    }
    return kth_element( right + 1, nd, k - as );
}

int main()
{
    int n, i, answer, k;
    in >> n >> k;

    for( i = 0; i < n; i++ )
    {
        in >> a[ i ];
    }

    answer = kth_element( 0, n - 1, k );

    out << answer;
    return 0;
}