Cod sursa(job #2942989)

Utilizator AnSeDraAndrei Sebastian Dragulescu AnSeDra Data 20 noiembrie 2022 14:00:10
Problema Statistici de ordine Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <cstdlib>

using namespace std;

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

#define Nmax 3000000

int v[Nmax], k;

void quickSort(int begin, int end)
{
    int pivot = v[begin + rand() % (end - begin)];

    int b = begin, e = end;

    while(v[b] < pivot)
    {
        b++;
    }

    while(v[e] > pivot)
    {
        e--;
    }

    while(b < e)
    {
        swap(v[b], v[e]);

        do
        {
            b++;
        } while(v[b] < pivot);

        do
        {
            e--;
        } while(v[e] > pivot);
    }

    if(begin < e && k < e)
    {
        quickSort(begin, e);
    }
    else if(e + 1 < end)
    {
        quickSort(e + 1, end);
    }
}

int main()
{
    int n, i;

    fin >> n >> k;
    k--;

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

    quickSort(0, n - 1);

    fout << v[k];

    return 0;
}