Cod sursa(job #2609892)

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

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

int k, n;

int quickselect(int v[],int len, int k)
{
    long int pivot = len - 1;
    int lo = 0, eq = 0, hi = 0;
	int LO[len];
	int EQ[len];
	int HI[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()
{
	int *v;

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