Pagini recente » Cod sursa (job #1074185) | Cod sursa (job #2388687) | Cod sursa (job #2827671) | Cod sursa (job #2534713) | Cod sursa (job #2132577)
#include <cstdio>
using namespace std;
struct per
{
int x, y;
} v[200003], a[200003];
int n;
void sift(int k)
{
int val = v[k].x, i = v[k].y;
int son = (k << 1);
while (son <= n)
{
if (son < n)
if (v[son + 1].x < v[son].x)
son++;
if (val <= v[son].x)
break;
v[k] = v[son];
a[v[k].y].y = k;
k = son;
son = (k << 1);
}
v[k].x = val;
v[k].y = i;
a[i].y = k;
}
void percolate(int k)
{
int val = v[k].x, i = v[k].y;
while (val < v[k / 2].x && k > 1)
{
v[k] = v[k >> 1];
a[v[k].y].y = k;
k >>= 1;
}
v[k].x = val;
v[k].y = i;
a[i].y = k;
}
void insert(int x, int k)
{
per p;
p.x = x;
p.y = k;
v[++n] = p;
a[k].x = x;
a[k].y = n;
percolate(n);
}
void erase(int k)
{
v[a[k].y] = v[n--];
sift(a[k].y);
}
/*
void print_heap()
{
for (int i = 1; i <= n; i++)
printf("%d ", v[i].val);
printf("\n");
}*/
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
int x, y, k = 0, t;
scanf("%d", &t);
for (int i = 0; i < t; i++)
{
scanf("%d", &x);
if (x < 3)
{
scanf("%d", &y);
if (x == 1)
insert(y, ++k);
else
erase(y);
}
else
printf("%d\n", v[1].x);
}
}