Cod sursa(job #2163456)

Utilizator TudorVersoiuVersoiu Tudor Sorin TudorVersoiu Data 12 martie 2018 18:20:14
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("sdo.in" );
ofstream g("sdo.out");

int partition(int arr[], int first, int last)
{
    swap(arr[last], arr[(first+last)/2]);


    int lastAdd = first-1;
    for ( int i=first; i<last; i++ ) {
        if ( arr[i] <= arr[last] )
        {
            ++lastAdd;
            swap(arr[lastAdd], arr[i]);
        }
    }

    swap(arr[++lastAdd], arr[last]);
    return lastAdd;
}
int k;
void quicksortStatistica(int arr[], int first, int last)
{
    int piv = partition(arr, first, last);
    if ( k == piv ) return;

    if ( k < piv && piv-1-first > 0 )
        quicksortStatistica(arr, first, piv-1);
    if ( k > piv && last - (piv+1) > 0 )
        quicksortStatistica(arr, piv+1,  last);
}

int n, v[3000005];
int main()
{
    f >> n >> k;

    for ( int i=1; i<=n; i++ )
        f >> v[i];


    quicksortStatistica(v, 1, n);
    g << v[k];
}