Cod sursa(job #2819068)

Utilizator TheLostRevolverCalin Andrei TheLostRevolver Data 17 decembrie 2021 18:31:36
Problema Statistici de ordine Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;
const unsigned int nMax = 4000000;
unsigned int v[nMax];

void statistici_ordine(int start, int stop, int k) {
    int st = start;
    int dr = stop;
    unsigned int pivot = v[rand() % (stop - start + 1) + start];
    while (st <= dr) {
        while (v[st] < pivot) {
            st++;
        }
        while (v[dr] > pivot) {
            dr--;
        }
        if (st <= dr) {
            swap(v[st], v[dr]);
            st++;
            dr--;
        }
    }
    if (start < dr)
        statistici_ordine(start, dr, k);
    if (stop > st)
        statistici_ordine(st, stop, k);
}

int main() {
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");
    srand(time(NULL));
    unsigned int n, k;
    fin >> n >> k;
    for (int i = 0; i < n; i++)
        fin >> v[i];
    statistici_ordine(0, n - 1, k);
    fout << v[k-1];
    fin.close();
    fout.close();
    return 0;
}