Cod sursa(job #1935149)

Utilizator dorin31Geman Dorin Andrei dorin31 Data 22 martie 2017 01:17:58
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

#define maxN 3000003

using namespace std;

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

int n,k,v[maxN];

int getKthElement(int left, int right, int k)
{
    while (left<right)
    {
        int p=left, q=right, pivot=v[p+rand()%(q-p+1)];

        while (p<q)
        {
            if (v[p]>=pivot) { swap(v[p],v[q]); --q; }
            else ++p;
        }

        if (v[q]>pivot) --q;

        if (k<=q) right=q;
        else left=q+1;
    }

    return v[k];
}

int main()
{
    srand(time(NULL));
    fin>>n>>k;
    for (int i=1; i<=n; ++i)
        fin>>v[i];
    fout<<getKthElement(1,n,k);
    return 0;
}