Cod sursa(job #3133872)

Utilizator Paul281881818818181991919191881818Draghici Paul Paul281881818818181991919191881818 Data 27 mai 2023 13:04:21
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
std::ifstream fin("sdo.in");
std::ofstream fout("sdo.out");
int n, k;
std::vector<int> arr;
int partition(std::vector<int>& arr, int left, int right){
    int x = arr[right], i = left;
    for(int j = left; j < right; j++){
        if(arr[j] <= x){
            std::swap(arr[i], arr[j]);
            i ++;
        }
    }
    std::swap(arr[i], arr[right]);
    return i;
}
int kthSmallest(std::vector<int>& arr, int left, int right, int k){
    if(k > 0 && k <= right - left + 1){
        int index = partition(arr, left, right);
        if(index - left == k - 1){
            return arr[index];
        }
        if(index - left > k - 1){
            return kthSmallest(arr, left, index - 1, k);
        }
        return kthSmallest(arr, index + 1, right, k - index + left - 1);
    }
    return 0;
}
int main(){
    fin >> n >> k;
    arr = std::vector<int> (n);
    for(int i = 0; i < n; i++){
        fin >> arr[i];
    }
    fout << kthSmallest(arr, 0, n - 1, k);
}