Cod sursa(job #2613703)

Utilizator smitoiStefan Mitoi smitoi Data 10 mai 2020 15:28:51
Problema Statistici de ordine Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>

/// https://www.infoarena.ro/problema/sdo

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

int LO[3000001], EQ[3000001], HI[3000001];

int quickselect(int v[], int len, int k)
{
    int pivot = rand() % len;
	
    int lo = 0, eq = 0, hi = 0;

    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)
        quickselect(LO, lo, k);
    else if (k <= lo + eq)
        return EQ[0];
    else
		quickselect(HI, hi, k - (lo + eq));
}

int main()
{
	int n, k;
	f >> n >> k;
	
    for(int i = 0; i < n; i++)
        f >> EQ[i];
	
    g << quickselect(EQ, n, k) << '\n';
}