Cod sursa(job #2431337)

Utilizator rd211Dinucu David rd211 Data 18 iunie 2019 23:26:31
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <random>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int a[3000010];
int k;
int part(int st,int dr,int indexPiv)
{
    int pivotVal = a[indexPiv];
    swap(a[dr],a[indexPiv]);
    int pIndex=st;
    for(int i = st;i<dr;i++)
        if(a[i]<pivotVal)
            swap(a[i],a[pIndex++]);
    swap(a[dr],a[pIndex]);
    return pIndex;
}
int quicksort(int st,int dr)
{
    if(st<=dr)
    {
        int randomIndex = st + rand()%(dr-st+1);
        int pIndex = part(st,dr,randomIndex);

        if(pIndex==k)
            return a[pIndex];
        else if(pIndex>k)
            return quicksort(st,pIndex-1);
        else
            return quicksort(pIndex+1,dr);
    }
}
int main()
{
    int n;
    fin>>n>>k;
    for(int i = 1;i<=n;i++)
        fin>>a[i];
    fout<<quicksort(1,n)<<'\n';
    return 0;
}