Pagini recente » Cod sursa (job #2723114) | Cod sursa (job #1187954) | Cod sursa (job #2868020) | Cod sursa (job #2831397) | Cod sursa (job #3124001)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 2e5;
int a[NMAX + 5];
struct heap
{
private:
int n;
int h[NMAX + 5];
public:
heap() {}
void up (int p)
{
while (p > 1 & a[h[p]] < a[h[(p >> 1)]])
{
swap(h[p], h[(p >> 1)]);
p >>= 1;
}
}
void down (int p)
{
while ((p << 1) <= n)
{
int q = p;
if (a[h[(p << 1)]] < a[h[q]])
q = (p << 1);
if ((p << 1) < n && a[h[(p << 1)|1]] < a[h[q]])
q = (p << 1)|1;
if (p == q) break;
swap(h[p], h[q]);
p = q;
}
}
void push (int x)
{
h[++n] = x;
up(n);
}
void pop()
{
h[1] = h[n--];
up(1);
down(1);
}
int top()
{
return h[1];
}
};
bitset<NMAX + 5>sters;
heap h;
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
int q;
scanf("%d", &q);
int t = 0;
while (q--)
{
int op;
scanf("%d", &op);
if (op == 1)
{
t++;
scanf("%d", &a[t]);
h.push(t);
}
else if (op == 2)
{
int x;
scanf("%d", &x);
sters[x] = true;
}
else
{
while (sters[h.top()])
h.pop();
printf("%d\n", a[h.top()]);
}
}
return 0;
}