Cod sursa(job #1833126)

Utilizator horatiucheval2Horatiu Andrei Cheval horatiucheval2 Data 21 decembrie 2016 18:25:38
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;

const int MAX = 3000000;
int v[MAX];


int quickselect(int a[], int left, int right, int k){
    int piv = a[(left + right) / 2];
    int i = left, j = right;
    while(i <= j){
        while(a[i] < piv){
            i++;
        }
        while(a[j] > piv){
            j--;
        }
        if(i <= j){
            swap(a[i], a[j]);
            i++;
            j--;
        }
    }

    if(i == k - 1){
        return a[i];
    }else if(i > k - 1){
        return quickselect(a, left, i, k);
    }else{
        return quickselect(a, i + 1, right, k);
    }

}
int main(){
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");

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

    fout << quickselect(v, 0, n - 1, k);

    fin.close();
    fout.close();
    return 0;
}