Cod sursa(job #2715951)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 4 martie 2021 13:42:27
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std;

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

int nr_elem, poz, ans=-1, v[3000005];

void citire()
{
    fin>>nr_elem>>poz;
    nr_elem--;
    poz--;
    for(int i=0; i<=nr_elem; i++)
        fin>>v[i];
}

void quicksort(int st, int dr)
{
    if(st>=dr || ans!=-1)
    {
        return;
    }
    if(st+1==dr)
    {
        if(v[st]>v[dr])
            swap(v[st], v[dr]);
        return;
    }
    int piv=rand()%(dr-st+1)+st;
    swap(v[piv], v[dr]);
    int free_pos=st;
    for(int i=st; i<dr; i++)
    {
        if(v[i]<=v[dr])
        {
            swap(v[free_pos], v[i]);
            free_pos++;
        }
    }
    swap(v[dr], v[free_pos]);
    if(poz==free_pos)
        ans=v[free_pos];
    if(poz < free_pos)
        quicksort(st, free_pos-1);
    if(poz > free_pos)
        quicksort(free_pos+1, dr);
}

void afisare()
{
    if(ans==-1)
        fout<<v[poz];
    else
        fout<<ans;
}

int main()
{
    srand(time(0));
    citire();
    quicksort(0, nr_elem);
    afisare();
    return 0;
}