Cod sursa(job #1820802)

Utilizator horatiucheval2Horatiu Andrei Cheval horatiucheval2 Data 2 decembrie 2016 11:36:30
Problema Statistici de ordine Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

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


void quicksort(int v[], int st, int dr, int k){
    int p1 = v[rand() % (dr - st + 1) + st];
    int p2 = v[rand() % (dr - st + 1) + st];
    int p3 = v[rand() % (dr - st + 1) + st];
    int piv = min(max(p1, p2), p3);
    int i = st, j = dr;

    while(i <= j){
        while(v[i] < piv){
            i++;
        }
        while(v[j] > piv){
            j--;
        }
        if(i <= j){
            swap(v[i], v[j]);
            i++;
            j--;
        }
    }

    if(st < j && k <= j - st + 1){
        quicksort(v, st, j, k);
    }
    if(i < dr && k > j - st + 1){
        quicksort(v, i, dr, k);
    }
}


int main(){
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");
    srand(time(NULL));

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

    k--;
    quicksort(v, 0, n - 1, k);
    fout << v[k];

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