Cod sursa(job #1256908)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 6 noiembrie 2014 23:32:31
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <stdlib.h>
using namespace std;

#define Nmax 3000005

int v[Nmax];
int n, k;

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

void read(){
    f >> n >> k;
    for (int i = 1; i <= n; ++i)
        f >> v[i];
}

void swap(int& a, int& b){
    a = (a + b) - (b = a);
}

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

        if (i < j)
            swap(v[i], v[j]);
        else
            return j;
    }
    return 0;
}

void solve(int l, int r){
    if (l == r)
        return;
    int q = part(l, r);

    if (q >= k)
        solve(l, q);
    else
        solve(q + 1, r);
}

int main(){

    read();
    srand(9283475);
    solve(1, n);
    g << v[k];

    return 0;
}