Cod sursa(job #3274598)

Utilizator andreipirjol5Andrei Pirjol andreipirjol5 Data 7 februarie 2025 14:09:01
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <iostream>

using namespace std;

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

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

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

int quick_select(int left, int right, int k) {
    if (left == right)
        return arr[left];

    int pivot_index = partition(left, right);
    int order = pivot_index - left + 1;

    if (order == k)
        return arr[pivot_index];
    else if (order > k)
        return quick_select(left, pivot_index - 1, k);
    else
        return quick_select(pivot_index + 1, right, k - order);
}

int main() {
    int n, k;
    fin >> n >> k;

    for (int i = 0; i < n; i++)
        fin >> arr[i];

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