Cod sursa(job #2609882)

Utilizator smitoiStefan Mitoi smitoi Data 3 mai 2020 19:07:59
Problema Statistici de ordine Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
#include <algorithm>
#include <iostream>

using namespace std;
	
ifstream	f("sdo.in");
ofstream	g("sdo.out");

long long int k, n;

long long int quickselect(long long int v[],long long int len, long long int k)
{
    long int pivot = len - 1;
    int lo = 0, eq = 0, hi = 0;
	long long int *LO = new long long int[len];
	long long int *EQ = new long long int[len];
	long long int *HI = new long long int[len];

    for (int i = 0; i < len; i++) 
	{
        if (v[i] < v[pivot])
		{
            LO[lo] = v[i];
			lo++;
		}
        else if(v[i] == v[pivot])
		{
            EQ[eq] = v[i];
			eq++;
		}
        else
		{
            HI[hi] = v[i];
			hi++;
		}
    } 
	
    if (k <= lo)
        return quickselect(LO, lo, k);
    else if (k <= lo + eq)
        return EQ[0];
    else
		return quickselect(HI, hi, k - (lo + eq));
	
}

int main()
{
	long long int *v;

    f >> n >> k;
	v = new long long int[n];
	
    for(long int i = 0; i < n; i++)
        f >> v[i];
	
    g << quickselect(v, n, k) << '\n';
	
}