Cod sursa(job #3347382)

Utilizator Sabin1133Padurariu Sabin Sabin1133 Data 16 martie 2026 15:36:34
Problema Statistici de ordine Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdlib>
#include <ctime>

#include <fstream>

#define NMAX 3000

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

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

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

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

            a = v[i];
            v[i] = v[j];
            v[j] = a;
        }

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

    return v[k];
}

int main()
{
    int n, k;
    int v[NMAX];
    std::ifstream fin("sdo.in");
    std::ofstream fout("sdo.out");

    srand(time(nullptr));

    fin >> n >> k;

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

    fout << quick_select(v, n, k) << '\n';

    return 0;
}