Cod sursa(job #3124581)

Utilizator BuzdiBuzdugan Rares Andrei Buzdi Data 29 aprilie 2023 13:10:42
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <algorithm>
#include <cassert>
#include <queue>
#include <cstdlib>
#define ll long long

using namespace std;

ifstream cin("sdo.in");
ofstream cout("sdo.out");

const int NMAX = 3e6;
int n, k;
int a[NMAX + 1];

int QuickSelect(int left, int right)
{
    int pivot = a[rand() % (right - left + 1) + left];
    int index = left;

    // cout << pivot << '\n';
    for(int i = left; i <= right; i++)
        if(a[i] < pivot)
            swap(a[index++], a[i]);

    // for(int i = 1; i <= n; i++)
    //     cout << a[i] << ' ';
    // cout << '\n';

    // cout << index << '\n';
    if(index < k)
        return QuickSelect(index + 1, right);

    if(index > k)
        return QuickSelect(left, index - 1);

    return a[index];
}

int main()
{
    srand(time(NULL));

    cin >> n >> k;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    
    cout << QuickSelect(1, n);

    return 0;
}