Cod sursa(job #2544674)

Utilizator paul3ioanCirstean Paul Ioan paul3ioan Data 12 februarie 2020 12:48:42
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
//#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
using namespace std;
ifstream cin("sdo.in");
ofstream cout("sdo.out");
unsigned n ,v[4000001];
unsigned quickselect(int l , int r ,int k)
{
    if(l == r)
        return v[l];
    unsigned piv = v[rand() % (r - l + 1) + l];
    int i = l;
    int j = r;
    while(i <=j)
    {
           while(v[i] < piv)
               i++;
           while(v[j] > piv)
               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));
}
int main() {
    int k;
    cin >> n >> k;

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

    }
    srand(time(0));
    cout<< quickselect(0, n - 1, k)<<'\n';
//    cout << v[k];
    return 0;
}