Cod sursa(job #1874011)

Utilizator mirunazMiruna Zavelca mirunaz Data 9 februarie 2017 16:33:32
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;

int n, k, v[3000013];

void qs (int left, int right)
{
    int i = left, j = right, aux;
    int pivot = v[left + rand ()% (right - left + 1)];
    while (i <= j)
    {
        while (v[i] < pivot){
            i ++;
        }
        while (v[j] > pivot){
            j --;
        }
        if (i <= j){
            aux = v[i];
            v[i] = v[j];
            v[j] = aux;
            i ++;
            j --;
        }
    }
    if (left < j && j >= k){
        qs (left, j);
    }
    if (i < right && i <= k){
        qs (i, right);
    }
}

int main ()
{
    freopen ("sdo.in", "r", stdin);
    freopen ("sdo.out", "w", stdout);
    srand (time (0));
    scanf ("%d%d", &n, &k);
    for (int i=1; i<=n; i++){
        scanf ("%d", &v[i]);
    }
    qs (1, n);
    printf ("%d", v[k]);
    return 0;
}