Cod sursa(job #1935107)

Utilizator dorin31Geman Dorin Andrei dorin31 Data 22 martie 2017 00:12:40
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 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 st=left, dr=right, mid=v[left+rand()%(right-left+1)];

        while (st<dr)
        {
            if (v[st]>=mid) { swap(v[st],v[dr]); --dr; }
            else ++st;
        }

        if (v[dr]>mid) dr--;

        if (k<=dr) right=dr;
        else left=dr+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;
}