// Los k mejores de una secuencia, con un heap de tamaño k.
#ifndef TOP_K_H
#define TOP_K_H

#include <algorithm>
#include <cstddef>
#include <vector>

#include "min_heap.h"
#include "not_implemented.h"

// Paso 3. better(a, b): a va antes que b. Devuelve los k mejores, del mejor al peor.
// Si hay menos de k, los devuelve todos. Debe costar O(n log k) comparaciones y guardar a lo
// sumo unos k elementos a la vez. Las pruebas cuentan las dos cosas.
// Para armar el heap, un comparador con captura sirve:
//     MinHeap<T, decltype(lambda)> heap(lambda);
template <typename T, typename Better>
std::vector<T> top_k(const std::vector<T>& items, std::size_t k, Better better) {
    (void)items;
    (void)k;
    (void)better;
    not_implemented("top_k");
}

#endif
