Cod sursa(job #2544683)

Utilizator paul3ioanCirstean Paul Ioan paul3ioan Data 12 februarie 2020 12:55:43
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <ctime>
#include <algorithm>
#include <cstdlib>
using namespace std;
ifstream cin ("sdo.in");
ofstream cout("sdo.out");
unsigned quickselect(int, int , int);
void citire();
unsigned n, v[4000004];
int main() {

    citire();

    return 0;
}
void citire()
{
    int k;
    cin >> n >> k ;
    for( int i =0 ;i <n;i ++)
        cin >>v[i];
    srand(time(0));
    cout <<quickselect(0 , n - 1, k);
}

unsigned quickselect(int l ,int r ,int k)
{
    if(l == r)
        return v[l];

    unsigned pivot = v[rand() % (r - l + 1)+ l];
    int i = l;
    int j = r;
    while(i<=j) {
        while (v[i] < pivot)
            i++;
        while (v[j] > pivot)
            j--;
        if (i <= j) {
            swap(v[i], v[j]);
            i++;
            j--;
        }
    }
    if( k<= (j - l + 1))
        return quickselect(l ,j ,k);
    else
        return quickselect(j + 1 , r ,k -(j - l + 1));

}