Pagini recente » Cod sursa (job #2796739) | Statistici Ursu Ianis-Vlad (ursu0406) | Cod sursa (job #2072469) | Cod sursa (job #274518) | Cod sursa (job #3127725)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
const int maxn = 2e5;
bool enabled[maxn + 1];
struct node {
int val, id;
node(int val = 0, int id = 0, bool enabled = true) {
this->val = val;
this->id = id;
}
};
node heap[maxn + 1];
void insert(node x, int &last) {
heap[last] = x;
int curr = last;
while (curr > 1 && heap[curr/2].val > heap[curr].val) {
swap(heap[curr/2], heap[curr]);
curr /= 2;
}
last++;
}
void pop(int &last) {
swap(heap[1], heap[--last]);
int curr = 1;
while (curr*2 < last) {
int choose = curr, st = curr*2, dr = curr*2 + 1;
if (heap[st].val < heap[choose].val)
choose = st;
if (heap[dr].val < heap[choose].val)
choose = dr;
if (curr == choose)
break;
swap(heap[curr], heap[choose]);
curr = choose;
}
}
void printHeap(int &last) {
for (int i = 1; i < last; i++)
cout << '(' << heap[i].val << ',' << heap[i].id << ") ";
cout << '\n';
}
void remove(int x, int &last) {
enabled[x] = false;
}
int main() {
int n;
fin >> n;
int last = 1, cnt = 1;
for (int i = 1; i <= n; i++) {
int op;
fin >> op;
if (op == 3) {
while (!enabled[heap[1].id])
pop(last);
fout << heap[1].val << '\n';
}
else {
int x;
fin >> x;
if (op == 1) {
enabled[cnt] = true;
insert(node(x, cnt++), last);
}
else
remove(x, last);
}
//printHeap(last);
}
return 0;
}