Pagini recente » Cod sursa (job #417301) | Cod sursa (job #2640648) | Cod sursa (job #634162) | Cod sursa (job #204408) | Cod sursa (job #3124000)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("heapuri.in");
ofstream out ("heapuri.out");
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()
{
int q;
in >> q;
int t = 0;
while (q--)
{
int op;
in >> op;
if (op == 1)
{
in >> a[++t];
h.push(t);
}
else if (op == 2)
{
int x;
in >> x;
sters[x] = true;
}
else
{
while (sters[h.top()])
h.pop();
out << a[h.top()] << '\n';
}
}
return 0;
}