Cod sursa(job #2307953)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 25 decembrie 2018 22:38:39
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <time.h>
#include <random>
#include <algorithm>
using namespace std;

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

static const int NMAX = 3e6+5;

int n,k,v[NMAX];

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

int Part(int low, int high)
{
    int random = rand() % (high - low + 1) + low;
    swap(v[random], v[high]);

    int pivot = v[high];

    int i = low -1;
    for(int j = low; j < high; ++j)
    {
        if(v[j] <= pivot)
        {
            i++;
            swap(v[i],v[j]);
        }
    }
    swap(v[i+1],v[high]);
    return i+1;
}

void QuickSort(int low, int high)
{
    if(low < high)
    {
        int pi = Part(low,high);

        if(k < pi)
            QuickSort(low, pi-1);
        else if(k > pi)
            QuickSort(pi+1,high);
    }
}

int main()
{
    srand(time(NULL));
    ReadInput();
    QuickSort(1,n);
    fout << v[k];

    return 0;
}