Cod sursa(job #2666305)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 1 noiembrie 2020 14:30:49
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <stdexcept>

const int NMAX = 2e5;

struct Elem {
  int val;
  int insertIndex;

  bool operator > (const Elem& other) const {
    return this->val > other.val;
  }
};

std::priority_queue<Elem, std::vector<Elem>, std::greater<>> pq;

bool removed[1 + NMAX];

int main() {
  std::ifstream in("heapuri.in");
  std::ofstream out("heapuri.out");

  int n;
  int index = 1;

  in >> n;

  int op, val;
  for (int i = 1; i <= n; ++i) {
    in >> op;

    switch (op) {
      case 1:
        in >> val;

        pq.push({val, index});
        ++index;

        break;

      case 2:
        in >> val;

        removed[val] = true;

        break;

      case 3:
        while (removed[pq.top().insertIndex]) {
          pq.pop();
        }
        out << pq.top().val << '\n';

        break;

      default:
        throw std::runtime_error("...");
    }
  }

  return 0;
}