Cod sursa(job #3122825)

Utilizator CelestinNegraru Celestin Celestin Data 20 aprilie 2023 19:14:20
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <stdlib.h>
#include <time.h>

#define MAX_N 4000000

unsigned v[MAX_N];

unsigned quickSelect(int l, int r, int k) {
    if (l == r) {
        return v[l];
    }
    int i = l, j = r;
    unsigned piv = v[rand() % (r - l + 1) + l];

    while (i <= j) {
        while (v[i] < piv) {
            i++;
        }
        while (v[j] > piv) {
            j--;
        }
        if (i <= j) {
            int tmp = v[i];
            v[i] = v[j];
            v[j] = tmp;
            i++;
            j--;
        }
    }
    if (k <= (j - l + 1)) {
        return quickSelect(l, j, k);
    } else {
        return quickSelect(j + 1, r, k - (j - l + 1));
    }
}

int main() {
    int n, k;
    std::fstream f("..\\input.txt", std::ios::in);
    f >> n >> k;
    for (int i = 1; i <= n; i++) {
        f >> v[i];
    }
    f.close();
    srand(time(0));
    f.open("..\\output.txt", std::ios::out);
    f << quickSelect(1, n , k) << '\n';
    f.close();
    return 0;
}