Cod sursa(job #742392)

Utilizator mihai995mihai995 mihai995 Data 29 aprilie 2012 22:48:09
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <cstdlib>
using namespace std;

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

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

int sdo(int v[], int n, int k)
{
    int x, nr;
    while (k != 1)
    {
        x = v[rand() % n + 1];
        nr = 0;

        for (int i = 1 ; i <= n ; i++)
            if (v[i] <= x)
                nr++;

        if (k == nr)
            return x;

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

        v[0] = 0;

        for (int i = 1 ; i <= n ; i++)
            if (v[i] > x)
                v[++v[0]] = v[i];

        k -= nr;
        n = v[0];
    }

    nr = inf;
    for (int i = 1 ; i <= n ; i++)
        if (v[i] < nr)
            nr = v[i];
    return nr;
}

int main()
{
    in >> n >> k;
    for (int i = 1 ; i <= n ; i++)
        in >> sir[i];

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

    return 0;
}