Cod sursa(job #3155743)

Utilizator SSKMFSS KMF SSKMF Data 9 octombrie 2023 16:33:17
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;

ifstream cin ("sdo.in");
ofstream cout ("sdo.out");

int sir[3000001];

int Partitionare (int stanga , int dreapta)
{
    int pozitie_pivot = stanga;
    swap(sir[stanga + rand() % (dreapta - stanga + 1)] , sir[dreapta]);
    for (int indice = stanga ; indice < dreapta ; indice++)
        if (sir[indice] < sir[dreapta]) swap(sir[indice] , sir[pozitie_pivot++]);

    swap(sir[pozitie_pivot] , sir[dreapta]);
    return pozitie_pivot;
}

int Statistica (int stanga , int dreapta , int ordine)
{
    int pozitie_pivot = Partitionare(stanga , dreapta);
    if (pozitie_pivot == ordine) return sir[ordine];
    if (pozitie_pivot > ordine) return Statistica(stanga , pozitie_pivot - 1 , ordine);
    return Statistica(pozitie_pivot + 1 , dreapta , ordine);
}

int main ()
{
    int lungime , ordine;
    cin >> lungime >> ordine;

    srand(time(0));
    for (int indice = 1 ; indice <= lungime ; indice++)
        cin >> sir[indice];

    cout << Statistica(1 , lungime , ordine);
    cout.close(); cin.close();
    return 0;
}