Cod sursa(job #1659383)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 22 martie 2016 10:39:41
Problema Statistici de ordine Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
#include <ctime>
#include <algorithm>

using namespace std;

int v[3000010];

int main ()
{
    freopen ("sdo.in", "r", stdin);
    freopen ("sdo.out", "w", stdout);

    srand (time (0));

    int n, k;
    scanf ("%d %d", &n, &k);

    for (int i = 1; i <= n; ++i)
        scanf ("%d", &v[i]);

    int st = 1, dr = n;
    while (st <= dr)
    {
        int x = rand () % (dr - st + 1) + st;
        int piv = v[x];

        int poz = st;
        for (int i = st; i <= dr; ++i)
            if (v[i] == piv && i < dr) swap (v[i--], v[dr]);
            else if (v[i] <= piv) swap (v[i], v[poz++]);
        --poz;
        if (poz < k) st = poz + 1;
        else if (poz > k) dr = poz - 1;
        else
        {
            printf ("%d\n", piv);
            return 0;
        }
    }

    return 0;
}