Cod sursa(job #3274710)

Utilizator andreipirjol5Andrei Pirjol andreipirjol5 Data 8 februarie 2025 10:25:42
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;

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

const int NMAX = 3000000;
int v[NMAX + 5];

int get_pivot(int left, int right)
{
    int pivot = right;
    int i = left;

    for (int j = left; j < right; j++) {
        if (v[j] < v[pivot]) {
            swap(v[i], v[j]);
            i++;
        }
    }
    
    swap(v[i], v[right]);
    return i;
}

int quick_select(int left, int right, int k)
{
    if (left <= right) {
        int pivot = get_pivot(left, right);
        int index = pivot - left + 1;

        if (index == k)
            return v[pivot];
        else if (index > k)
            return quick_select(left, pivot - 1, k);
        else
            return quick_select(pivot + 1, right, k - index);
    }
}

int main() {
    int n, k;
    fin >> n >> k;
    for (int i = 1; i <= n; i++)
        fin >> v[i];

    fout << quick_select(1, n, k);
    return 0;
}