#include <functional>
#include <iostream>
#include <queue>
#include <span>
#include <vector>
std::vector<int> largest(std::span<const int> input, std::size_t k) {
    std::priority_queue<int, std::vector<int>, std::greater<int>> heap;
    for (const int x : input) {
        heap.push(x);
        if (heap.size() > k) heap.pop();
    }
    std::vector<int> result;
    while (!heap.empty()) { result.push_back(heap.top()); heap.pop(); }
    return result;
}
int main() {
    const std::vector<int> values{5, 1, 9, 3, 7};
    const auto top = largest(values, 3);
    if (top != std::vector<int>{5, 7, 9} || !largest(values, 0).empty() ||
        largest(values, 10).size() != values.size()) return 1;
    for (std::size_t i = 0; i < top.size(); ++i)
        std::cout << (i == 0 ? "" : " ") << top[i];
    std::cout << '\n';
}
