Cod sursa(job #1256987)

Utilizator sherban26FMI Mateescu Serban-Corneliu sherban26 Data 7 noiembrie 2014 03:23:19
Problema Statistici de ordine Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>

#define NMAX 3000005

using namespace std;

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

unsigned long x[NMAX];

int part(unsigned long *v, int l, int r)
{
    int piv = v[l + rand() % (r - l + 1)];

    int i = l, j = r;

    while (1)
    {
        while (v[i] < piv)
            i++;
        while (v[j] > piv)
            j--;

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

    return 0;
}

void statord(unsigned long *v, int l, int r, int k)
{
    if (l == r)
        return;

    int poz = part(v, l, r);

    if (poz >= k)
        statord(v, l, poz, k);
    else
        statord(v, poz + 1, r, k);
}

int main()
{
    srand(time(NULL));
    int n, k;

    f >> n >> k;

    for (int i = 0; i < n; i++)
        f >> x[i];

    statord(x, 0, n - 1, k - 1);

    g << x[k - 1];

    return 0;
}