Cod sursa(job #744933)

Utilizator mihai995mihai995 mihai995 Data 10 mai 2012 02:35:39
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <algorithm>
using namespace std;

const int N = 3000005, inf = 0x3f3f3f3f;
int v[N], n, k;

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

int sdo(int v[], int n, int k)
{
    int p, st = 1, dr = 0;

    while (1)
    {
        p = v[ 1 + rand() % n ];
        st = 1; dr = 0;

        for (int i = 1 ; i <= n ; i++)
        {
            if (v[i] < p)
                st++;
            if (v[i] <= p)
                dr++;
        }

        if (st <= k && k <= dr)
            return p;

        if (k < st)
        {
            v[0] = n;
            n = 0;
            for (int i = 1 ; i <= v[0] ; i++)
                if (v[i] < p)
                    v[++n] = v[i];
            continue;
        }

        k -= dr;
        v[0] = n;
        n = 0;
        for (int i = 1 ; i <= v[0] ; i++)
            if (v[i] > p)
                v[++n] = v[i];
    }
    return 0;

}

int main()
{
    in >> n >> k;

    for (int i = 1 ; i <= n ; i++)
        in >> v[i];

    out << sdo(v, n, k) << "\n";

    return 0;
}