Cod sursa(job #3131947)

Utilizator Nicoleta114Caramaliu Nicoleta Nicoleta114 Data 21 mai 2023 21:54:31
Problema Heapuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    ifstream f("heapuri.in");
    ofstream g("heapuri.out");

    int N;
    f >> N;

    vector<int> heap; // Vectorul în care vom stoca elementele heap-ului
    set<int> distinctElements; // Multimea elementelor distincte din heap

    for (int i = 0; i < N; i++) {
        int cod;
        f >> cod;

        if (cod == 1) {
            int x;
            f >> x;

            heap.push_back(x);
            distinctElements.insert(x);
            push_heap(heap.begin(), heap.end(), greater<int>());
        } else if (cod == 2) {
            int x;
            f >> x;

            auto it = distinctElements.find(x);
            if (it != distinctElements.end()) {
                // Eliminăm elementul din multimea distinctElements
                distinctElements.erase(x);
                // Căutăm elementul în heap și îl eliminăm
                auto heapIt = find(heap.begin(), heap.end(), x);
                if (heapIt != heap.end()) {
                    // Rearanjam heap-ul după eliminarea elementului
                    heap.erase(heapIt);
                    make_heap(heap.begin(), heap.end(), greater<int>());
                }
            }
        } else if (cod == 3) {
            // Afișăm elementul minim din heap
            g << *(distinctElements.begin()) << "\n";
        }
    }

    f.close();
    g.close();
    return 0;
}