Cod sursa(job #1987134)

Utilizator flaviu_2001Craciun Ioan-Flaviu flaviu_2001 Data 29 mai 2017 20:41:19
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

int n, t, v[3000005];

void swap(int &x, int &y)
{
    int aux = x;
    x = y;
    y = aux;
}

int pivot(int l, int r)
{
    int piv = rand()%(r-l+1) + l;
    swap(v[l], v[piv]);
    int st = l, dr = r, x = v[st];
    while(st < dr){
        while(st < dr && v[dr] >= x)
            --dr;
        v[st] = v[dr];
        while(st < dr && v[st] <= x)
            ++st;
        v[dr] = v[st];
    }
    v[st] = x;
    return st;
}

int quick_select(int l, int r)
{
    int m = pivot(l, r);
    if(m == t)
        return v[m];
    if(m > t)
        return quick_select(l, m-1);
    else if(m < t)
        return quick_select(m+1, r);
}

int main()
{
    srand(time(NULL));
    ifstream fin ("sdo.in");
    ofstream fout ("sdo.out");
    fin >> n >> t;
    for (int i = 1; i <= n; ++i)
        fin >> v[i];
    fout << quick_select(1, n);
    return 0;
}