Cod sursa(job #1226587)

Utilizator o_micBianca Costin o_mic Data 6 septembrie 2014 12:44:04
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#define MAX_LENGTH 3000000

using namespace std;

long long v[MAX_LENGTH];

long long rselection(int k, int left, int right)
{
    int i = left, j = right - 1, ok = 1;
    long long pivot = rand() % (right - left) + left;
    while(ok)
    {
        do
        {
            i++;
        }while(v[i] < pivot);
        do
        {
            j--;
        }while(v[j] > pivot);
        if(i < j)
            swap(v[i], v[j]);
        else
            ok = 0;
    }
    if(j + 1 > k)
        return rselection(k, left, j+1);
    if(j + 1 < k)
        return rselection(k-j-1, j+1, right);
    return pivot;
}

int main()
{
    int n, i, k;
    srand(time(NULL));
    fstream f("sdo.in", ios::in);
    fstream g("sdo.out", ios::out);
    f >> n >> k;
    for(i = 0 ; i < n ; i++)
        f >> v[i];
    g << rselection(k, 0, n);
    return 0;
}