Cod sursa(job #1767112)

Utilizator AhileGigel Frone Ahile Data 28 septembrie 2016 18:47:40
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<bits/stdc++.h>
using namespace std;
#define in f
#define out g


ifstream f ("sdo.in");
ofstream g ("sdo.out");

int n;
int k;
int v[3000010];

int quick(int left, int right) {
    int i = left, j = right;
    int tmp;
    int pivot = v[rand() % (right - left) + left + 1];

    while (i <= j) {
        while (v[i] < pivot)
            i++;
        while (v[j] > pivot)
            j--;
        if (i <= j) {
            tmp = v[i];
            v[i] = v[j];
            v[j] = tmp;
            i++;
            j--;
        }
    };

    if(i > k) {
        right = i;
    } else {
        if(i < k) {
            left = i;
        } else {
            out << v[j + 1];
            return 0;
        }
    }
    if (left < j)
        quick(left, j);
    if (i < right)
        quick(i, right);
}

int main() {

    in >> n;
    in >> k;
    for(int i = 1; i <= n; ++i) {
        in >> v[i];
    }
    quick(1, n);

}