Pagini recente » Cod sursa (job #2663642) | Cod sursa (job #2983960) | Cod sursa (job #957969) | Cod sursa (job #3153681) | Cod sursa (job #2666305)
#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;
}