Cod sursa(job #3347358)

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

#include <iostream>

#define NMAX 3000000

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

    l = 0;
    r = n - 1;

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

        a = v[i];
        v[i] = v[r];
        v[r] = a;

        for (i = l, j = l; j < r; ++j)
            if (v[j] < pivot) {
                a = v[i];
                v[i] = v[j];
                v[j] = a;

                ++i;
            }

        a = v[i];
        v[i] = v[r];
        v[r] = a;

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

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