Cod sursa(job #2294147)

Utilizator dragos99Homner Dragos dragos99 Data 1 decembrie 2018 22:53:32
Problema Statistici de ordine Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<time.h>
#include<stdlib.h>
using namespace std;
    ifstream f("sdo.in");
    ofstream g("sdo.out");
long n;
long a[3000001];

long partitie_pivot(long left, long right){
    long i = left, j = right;
    long pivot = rand()%(right - left + 1) + left;
    pivot = a[pivot];

    while(true){
        while(a[i] < pivot){
            i++;
        }
        while(pivot < a[j]){
            j--;
        }
        if(i<j){
            swap(a[i], a[j]);
        }else{
            return j;
        }
    }
    return 0;
}

void quicksort(long left, long right, long k){
    if(left == right) return;

    long x = partitie_pivot(left, right);
    long y = x - left + 1;
    if( y >= k)
        quicksort(left, x, k);
    else
        quicksort(x + 1, right, k - y);

}

int main()
{
long k;
f>>n>>k;

srand (time(NULL));

for(long i = 1; i <= n ; i++)
    f>>a[i];

quicksort(1, n, k);

g<<a[k];

return 0;
}