Cod sursa(job #3122946)

Utilizator Sorin123-21Enachioiu Sorin-Catalin Sorin123-21 Data 21 aprilie 2023 12:51:34
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include<bits/stdc++.h>
using namespace std;
ifstream in ("sdo.in");
ofstream out ("sdo.out");

int partition(vector<int>& arr, int left, int right, int pivotIndex) {
    int pivotValue = arr[pivotIndex];
    int storeIndex = left;
    swap(arr[pivotIndex], arr[right]);
    for (int i = left; i < right; i++) {
        if (arr[i] < pivotValue) {
            swap(arr[i], arr[storeIndex]);
            storeIndex++;
        }
    }
    swap(arr[storeIndex], arr[right]);
    return storeIndex;
}

int quickSelect(vector<int>& arr, int left, int right, int k) {
    if (left == right) {
        return arr[left];
    }
    int pivotIndex = left + (right - left) / 2;
    pivotIndex = partition(arr, left, right, pivotIndex);
    if (k == pivotIndex) {
        return arr[k];
    }
    else if (k < pivotIndex) {
        return quickSelect(arr, left, pivotIndex - 1, k);
    }
    else {
        return quickSelect(arr, pivotIndex + 1, right, k);
    }
}

int main() {
    int K, N;
    vector<int> arr;

    in >> N >> K;   

    for(int i = 0; i < N; i++){
        int temp;
        in >> temp;
        arr.push_back(temp);
    }

    out << quickSelect(arr, 0, N-1, K-1);
    return 0;
}