Cod sursa(job #1019870)

Utilizator catalin94Catalin Cristea catalin94 Data 1 noiembrie 2013 01:21:53
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;

int n,
    v[100000],
    k;

int div(int v[], int l, int r) {
    int i = l - 1,
        j = r + 1,
        p = v[l + (rand()%(r - l + 1))];
    while(1) {
        do {
            ++i;
        } while(v[i] < p);

        do {
            --j;
        } while(v[j] > p);
        if(i < j) {
            int aux;
            aux = v[i];
            v[i] = v[j];
            v[j] = aux;
        } else
            return j;
    }
    return 0;
}

void qSort(int v[], int l, int r, int k) {
    if(l == r)
        return;
    int x = div(v, l, r);
    int y = x - l + 1;

    if(y >= k)
        qSort(v, l, x, k);
    else
        qSort(v, x + 1, r, k - y);
}

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

    f >> n >> k;
    for(int i = 1; i <= n; i++)
        f >> v[i];
    qSort(v, 1, n, k);
    g << v[k];

    f.close();
    g.close();
}