Cod sursa(job #2129745)

Utilizator omegasFilip Ion omegas Data 13 februarie 2018 03:35:41
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");
int v[3000001];

int partitie(int p,int r){
    int pivot;
    pivot = (rand()%(r - p + 1) + p);
    swap(v[pivot],v[r]);

    int q = r;
    int x = v[r];
    int i = p-1;

    for(int j=p;j<r;++j){
        if(v[j] <= x){
            ++i;
            swap(v[i],v[j]);
        }
    }
    swap(v[i + 1],v[r]);
    return i + 1;
}

int orderSelect(int p,int r,int k)
{
    if(p == r)
        return v[p];
    int q;
    int aux;
    q = partitie(p,r);
    aux = q - p + 1;
    if(aux == k)
        return v[q];
    else if(aux > k)
        return orderSelect(p,q - 1,k);
    else
        return orderSelect(q + 1,r,k - aux);

}

int main()
{
    int n,k,x,i;
    fin >> n >> k;


    for(i=1;i<=n;++i){
        fin >> v[i];
    }
    fout << orderSelect(1,n,k);

    return 0;
}