Pagini recente » Cod sursa (job #529699) | Cod sursa (job #1793630) | Formatare Textile | Cod sursa (job #2370543) | Cod sursa (job #3208844)
#include <bits/stdc++.h>
#warning sunt pe onlinegdb
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
const int nmax = 2e5;
int heap[5 + nmax], v[5 + nmax], del[5 + nmax];
void siftDown(int i, int n) {
int imin, vmin, val;
vmin = val = heap[imin = i];
if (2 * i <= n && v[heap[2 * i]] < v[vmin]) {
vmin = heap[imin = 2 * i];
}
if (2 * i + 1 <= n && v[heap[2 * i + 1]] < v[vmin]) {
vmin = heap[imin = 2 * i + 1];
}
while (imin > i) {
heap[i] = heap[imin];
i = imin;
vmin = val;
if (2 * i <= n && v[heap[2 * i]] < v[vmin]) {
vmin = heap[imin = 2 * i];
}
if (2 * i + 1 <= n && v[heap[2 * i + 1]] < v[vmin]) {
vmin = heap[imin = 2 * i + 1];
}
}
heap[i] = val;
}
void siftUp(int i) {
int c, val = heap[i];
while (i > 1 && v[heap[c = i / 2]] > v[val]) {
heap[i] = heap[c];
i = c;
}
heap[i] = val;
}
inline void insert(int i, int &n) {
heap[++n] = i;
siftUp(n);
}
inline void deleteMin(int &n) {
heap[1] = heap[n--];
siftDown(1, n);
}
int main() {
int n;
fin >> n;
int pos = 0, m = 0;
while (n--) {
int type;
fin >> type;
if (type == 1) {
fin >> v[++pos];
insert(pos, m);
} else if (type == 2) {
int val;
fin >> val;
del[val] = 1;
} else {
while (del[heap[1]]) {
deleteMin(m);
}
fout << v[heap[1]] << '\n';
}
}
return 0;
}