Cod sursa(job #1941185)

Utilizator dorin31Geman Dorin Andrei dorin31 Data 27 martie 2017 01:12:20
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 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 pivot(int left, int right)
{
    int i=left, j=right, x=v[left];
    x=v[i];
    while (i<j)
    {
        while (i<j && v[j]>x) --j;
        v[i]=v[j];
        while (i<j && v[i]<=x) ++i;
        v[j]=v[i];
    }
    v[i]=x;
    return i;
}

void quickSelect(int left, int right, int k)
{
    if (left==right) return;

    int x=pivot(left,right);
    int p=x-left+1;

    if (p>=k) quickSelect(left,p,k);
    else quickSelect(p+1,right,k-p);
}

int main()
{
    //srand(time(NULL));
    fin>>n>>k;
    for (int i=1; i<=n; ++i)
        fin>>v[i];

    quickSelect(1,n,k);
    fout<<v[k];
    return 0;
}