Cod sursa(job #3347293)

Utilizator Sabin1133Padurariu Sabin Sabin1133 Data 16 martie 2026 00:23:31
Problema Statistici de ordine Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdlib>
#include <ctime>

#include <iostream>

#define NMAX 3000000

int quick_select(int *v, int n, int k)
{
    int pivot;
    int l, r, i, j;

    l = 0;
    r = n - 1;

    while (l < r) {
        pivot = v[l + (rand() % (r - l + 1))];

        i = l;
        j = r;

        while (1) {
            while (v[i] < pivot)
                ++i;
    
            while (v[j] > pivot)
                --j;
    
            if (i >= j)
                break;

            std::swap(v[i], v[j]);

            ++i;
            --j;
        }

        if (j < k - 1)
            l = j + 1;
        else
            r = j;
    }

    return v[k - 1];
}

int main()
{
    int n, k;
    int v[NMAX];

    freopen("sdo.in", "r", stdin);
    freopen("sdo.out", "w", stdout);

    srand(time(nullptr));

    std::cin >> n >> k;

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

    std::cout << quick_select(v, n, k) << '\n';

    return 0;
}