Cod sursa(job #3344691)

Utilizator prares06Papacioc Rares-Ioan prares06 Data 4 martie 2026 18:23:26
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <iomanip>
#include <algorithm>

int partitie(int *v, int st, int dr){
    int pivotIndex = rand() % (dr - st + 1) + st;
    std::swap(v[pivotIndex], v[dr]);
    int pivot = v[dr];
    int i = st - 1;
    for(int j = st; j < dr; ++j){
        if(v[j] <= pivot){
            ++i;
            std::swap(v[i], v[j]);
        }
    }
    std::swap(v[i + 1], v[dr]);
    return (i + 1);
}

int kmin(int* v, int st, int dr, int k){
    while(st <= dr){
        int pivot = partitie(v, st, dr);

        if(pivot == k - 1)
            return v[pivot];
        else if(pivot > k - 1)
            dr = pivot - 1;
        else
            st = pivot + 1;
    }
    return -1;
}

int n, k;
int* v;

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

int main(){
    srand(time(0));
    fin >> n >> k;
    v = new int[n];
    for(int i = 0; i < n; ++i)
        fin >> v[i];

    fout << kmin(v, 0, n - 1, k);
}