Cod sursa(job #2795194)

Utilizator guzgandemunteIonescu Laura guzgandemunte Data 6 noiembrie 2021 08:57:05
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#define NMAX 3000000

using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");

int n, k;
int v[NMAX];

int partitie(int st, int dr)
{
    int pivot = v[st + rand() % (dr - st + 1)];
    int i = st - 1, j = dr + 1, tmp;

    while (1) {
        do
            i++;
        while (v[i] < pivot);

        do
            j--;
        while (v[j] > pivot);

        if (i >= j)
            return j;

        tmp = v[i], v[i] = v[j], v[j] = tmp;
    }
}

int quickSelect(int k, int st, int dr)
{
    if (st == dr) return v[st];

    int pivot = partitie(st, dr);

    if (k <= pivot) return quickSelect(k, st, pivot);
    else return quickSelect(k, pivot + 1, dr);
}
int main()
{
    fin >> n >> k;

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

    fout << quickSelect(k - 1, 0, n - 1);

    fin.close();
    fout.close();
    return 0;
}