Cod sursa(job #2746249)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 27 aprilie 2021 17:21:09
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;

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


int v[3000005];
int result = -1;


void quicksort(int lf, int rg, int pos)
{
    if(lf >= rg || result != -1)
    {
        return;
    }

    if(lf + 1 == rg)
    {
        if(v[lf] > v[rg])
            swap(v[lf], v[rg]);

        return;
    }

    int piv = rand() %(rg - lf + 1) + lf;
    swap(v[piv], v[rg]);

    int free_pos = lf;
    for(int i = lf; i < rg; i++)
    {
        if(v[i] <= v[rg])
        {
            swap(v[free_pos], v[i]);
            free_pos++;
        }
    }

    swap(v[rg], v[free_pos]);

    if(pos == free_pos)
        result = v[free_pos];

    if(pos < free_pos)
        quicksort(lf, free_pos - 1, pos);

    if(pos > free_pos)
        quicksort(free_pos + 1, rg, pos);

}

int main()
{
    int n, k;
    fin >> n >> k;

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

    srand(time(0));
    quicksort(0, n - 1, k - 1);

    if (result == -1)
    {
        fout << v[k - 1];
    }
    else
    {
        fout << result;
    }

    return 0;
}