Cod sursa(job #3124127)

Utilizator b69gdanBogdan Manolache b69gdan Data 26 aprilie 2023 23:39:46
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
// #include <queue>


std::ifstream fin("heapuri.in");
std::ofstream fout("heapuri.out");

const int NMAX = 2e5;

int getIndex(std::vector<int> v, int K)
{
    auto it = find(v.begin(), v.end(), K);
  
    if (it != v.end()) 
    {
        int index = it - v.begin();
        return index;
    }
}

int main()
{
    // std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;
    std::vector<int> vec;
    std::vector<int> deleted(NMAX, 0);
    std::vector<int> minHeap;
    int n, operation, value;
    // int cnt = 0;
    fin >> n;

    for (int i = 0; i < n; ++i) {
        fin >> operation;
        
        if (operation == 1) {
            fin >> value;
            vec.push_back(value);
        }// 7 9 2
        else if (operation == 2) {
            fin >> value;
            deleted[value - 1] = 1;
            // vec.erase(vec.begin() + value - 1 - cnt);   
            // ++cnt;         
        }   
        else if (operation == 3) {
            minHeap = vec;
            std::make_heap(minHeap.begin(), minHeap.end(), std::greater<int>());
            while (deleted[getIndex(vec, minHeap.front())] == 1) {
                std::pop_heap(minHeap.begin(), minHeap.end()); minHeap.pop_back();
                std::make_heap(minHeap.begin(), minHeap.end(), std::greater<int>());
            }
            
            fout << minHeap.front() << '\n';
        }
    }

    return 0;
}