Cod sursa(job #3344943)

Utilizator Razvan23Razvan Mosanu Razvan23 Data 6 martie 2026 20:31:48
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

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

int aranjare(std::vector<int>& a, int st, int dr)
{
    int poz_random = st + rand() % (dr - st + 1);
    std::swap(a[poz_random], a[dr]);
    int pivot = a[dr];
    int i = st;
    for (int j = st; j < dr; j++)
        if (a[j] <= pivot)
        {
            std::swap(a[i], a[j]);
            i++;
        }
    std::swap(a[i], a[dr]);
    return i;
}

int quickSelect(std::vector<int>& a, int st, int dr, int k)
{
    while (st <= dr)
    {
        int p = aranjare(a, st, dr);
        if (p == k) return a[p];
        else if (p < k) st = p + 1;
        else dr = p - 1;
    }
    return -1;
}

int main()
{
    std::ios_base::sync_with_stdio(0);
    fin.tie(0);
    int n, k, i, x;
    std::vector<int> a;
    fin >> n >> k;
    for(i=0; i<n; i++)
    {
        fin >> x;
        a.push_back(x);
    }
    fout << quickSelect(a, 0, n-1, k-1);
    fin.close();
    fout.close();
    return 0;
}