Cod sursa(job #1212520)

Utilizator mariusn01Marius Nicoli mariusn01 Data 25 iulie 2014 00:06:39
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <time.h>
#include <stdlib.h>
#define DIM 3000010

using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");

int v[DIM];

int n, k, i, j, p, aux, x;

int poz(int st, int dr) {
    x = st + rand()%(dr-st+1);
    aux = v[st];
    v[st] = v[x];
    v[x] = aux;
    i = 0;
    j = -1;
    while (st < dr) {
        if (v[st] > v[dr]) {
            aux = v[st];
            v[st] = v[dr];
            v[dr] = aux;
            aux = i;
            i = -j;
            j = -aux;
        }
        st += i;
        dr += j;
    }
    return st;
}

int cauta(int st, int dr, int k){
    if (st == dr)
        return v[st];

    p = poz(st, dr);
    if (p == k)
        return v[k];
    if (p>k)
        return cauta(st, p-1, k);
    else
        return cauta(p+1, dr, k);

}

int main() {
    fin>>n>>k;
    for (i=1;i<=n;i++)
        fin>>v[i];
    srand(time(0));

    fout<<cauta(1, n, k)<<"\n";

    return 0;
}