Cod sursa(job #1348840)

Utilizator Edsger.DijkstraEdsger Wybe Dijkstra Edsger.Dijkstra Data 19 februarie 2015 21:20:01
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

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

const int MAXN = 3000010;

int V[MAXN];

int partition (int st, int dr)
{
    int i, j, p;

    i = st - 1;
    j = dr + 1;
    p = V[st + rand () % (dr - st + 1)];

    while (1){
        do{
            i ++;
        } while (V[i] < p);

        do{
            j --;
        } while (V[j] > p);

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

void my_nth (int st, int dr, int K)
{
    if (st >= dr)
        return;

    int p = partition (st, dr);
    int t = p - st + 1;

    if (K <= t)
        my_nth (st, p, K);
    else
        my_nth (p + 1, dr, K - t);
}

int main()
{
    srand (time (0));

    int N, K, i;

    in >> N >> K;
    for (i = 1; i <= N; i ++)
        in >> V[i];

    my_nth (1, N, K);

    out << V[K];

    return 0;
}