Cod sursa(job #2618680)

Utilizator AlexnolifeAlexandru Ica Alexnolife Data 25 mai 2020 18:54:59
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <algorithm>
#include <array>
#include <fstream>
#include <iostream>
#include <vector>

auto main() noexcept -> int
{
    std::ifstream f{ "heapuri.in" };
    std::ofstream g{ "heapuri.out" };

    std::vector<int> nums{};
    std::array<int, 200'001> order{};
    std::size_t idx{ 0 };

    int n{ 0 };

    f >> n;
    nums.reserve(static_cast<std::size_t>(n));
    order.fill(0);

    for(int i = 0; i < n; ++i) {
        int op{ 0 };

        f >> op;

        switch(op) {
        case 1: {
            int x{ 0 };

            f >> x;
            nums.push_back(x);
            order[++idx] = x;
            std::push_heap(nums.begin(), nums.end(), std::greater<>{});

            break;
        }
        case 2: {
            std::size_t index{ 0 };

            f >> index;

            auto& num = *std::find(nums.begin(), nums.end(), order[index]);

            std::swap(num, nums.back());
            nums.pop_back();
            std::make_heap(nums.begin(), nums.end(), std::greater<>{});

            break;
        }
        case 3: {
            g << nums.front() << '\n';
        }
        default: {
            break;
        }
        }
    }
}