Cod sursa(job #1246572)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 21 octombrie 2014 12:31:51
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

const int NMax = 3000010;
int a[NMax];
int N, K;

void Read()
{
    ifstream f("sdo.in");
    f >> N >> K;
    for (int i = 1; i <= N; ++ i)
        f >> a[i];
    f.close();
}

int sdo(const int st, const int dr, const int k)
{
    if (st == dr)
        return a[st];
    int poz = st + (rand() % (dr - st + 1));
    int pivot = a[poz], i, j;
    i = st, j = dr;
    while (i <= j)
    {
        while (a[i] < pivot)
            ++ i;
        while (a[j] > pivot)
            -- j;
        if (i <= j)
        {
            swap(a[i], a[j]);
            ++ i, -- j;
        }
    }
    if (j - st + 1 >= k)
        return sdo(st, j, k);
    else
        return sdo(j+1, dr, k - j + st - 1);
}

void Write()
{
    ofstream g ("sdo.out");
    g << sdo(1, N, K) << "\n";
    g.close();
}

int main()
{
    srand(time(NULL));
    Read();
    Write();
    return 0;
}