Cod sursa(job #3346677)

Utilizator Sabin1133Padurariu Sabin Sabin1133 Data 14 martie 2026 22:50:21
Problema Statistici de ordine Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdlib>
#include <ctime>

#include <iostream>

#define NMAX 3000000

int quick_select(int *v, int n, int k)
{
    int a;
    int l, r, m;

    l = 0;
    r = n - 1;
    m = 0;

    while (l <= r) {
        m = l + (rand() % (r - l + 1));

        a = v[m];
        v[m] = v[r];
        v[r] = a;

        m = l;

        for (int i = l; i < r; ++i)
            if (v[i] < v[r]) {
                a = v[m];
                v[m] = v[i];
                v[i] = a;

                ++m;
            }

        a = v[m];
        v[m] = v[r];
        v[r] = a;

        if (m + 1 == k)
            return v[m];
        else if (m + 1 < k)
            l = m + 1;
        else
            r = m - 1;
    }

    return v[m];
}

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;
}