Cod sursa(job #3255210)

Utilizator MikeStrikeAgache Mihai MikeStrike Data 9 noiembrie 2024 17:58:28
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;



int quickSelect(vector<int>& arr, int left, int right, int k) {
    if (left == right) {
        return arr[left];
    }

  int pivotIndex = left + rand() % (right - left + 1)
    swap(arr[pivotIndex], arr[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]);
    pivotIndex = i;
    
    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() {
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");

    srand(time(0)); 
    int n, k;
    fin >> n >> k;
    k--; 

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

    
    int result = quickSelect(arr, 0, n - 1, k);


    fout << result << endl;


    return 0;
}