Cod sursa(job #3349541)

Utilizator alexlazuLazureanu Alexandru Ioan alexlazu Data 31 martie 2026 14:36:05
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>

using namespace std;

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

#define cin in
#define cout out

int n, k;
vector<int> v;

int parition(int stanga, int dreapta)
{
    if (stanga > dreapta)
        return 0;
    else if (stanga == dreapta)
        return v[stanga];
    int mij = (stanga + dreapta) / 2;

    // nu e bine sa tot mutam pivotul deci il separam
    swap(v[mij], v[dreapta]);

    int poz = stanga - 1;
    for (int i = stanga; i < dreapta; i++)
    {
        if (v[i] <= v[dreapta]) {
            poz++;
            swap(v[i], v[poz]);
        }
    }
    poz++;
    swap(v[poz], v[dreapta]);
    if (poz == k)
        return v[poz];
    else if (k > poz) {
        k = k - poz;
        return parition(poz + 1, dreapta);
    }
    else {

        return parition(stanga, poz - 1);
    }
}

int main()
{
    cin >> n >> k;
    for (int i = 0, x; i < n; i++)
    {
        cin >> x;
        v.push_back(x);
    }
    k = k - 1;
    // alegem un subarray
    // luam un pivot (el de la mijloc)
    // partitionam array-ul bazat pe marimea pivotului
    int rez = parition(0, n - 1);
    cout << rez;
    return 0;
}