Pagini recente » Cod sursa (job #140199) | Cod sursa (job #2066489) | Cod sursa (job #1860697) | Cod sursa (job #2490464) | Cod sursa (job #2132542)
#include <cstdio>
using namespace std;
struct per
{
int val, i;
} v[200003];
int n;
void sift(int k)
{
int val = v[k].val, i = v[k].i;
int son = (k << 1);
while (son <= n)
{
if (son < n)
if (v[son + 1].val < v[son].val)
son++;
if (val <= v[son].val)
break;
v[k] = v[son];
k = son;
son = (k << 1);
}
v[k].val = val;
v[k].i = i;
}
void percolate(int k)
{
int val = v[k].val, i = v[k].i;
while (val < v[k / 2].val && k > 1)
{
v[k] = v[k >> 1];
k >>= 1;
}
v[k].val = val;
v[k].i = i;
}
void insert(int x, int k)
{
per p;
p.val = x;
p.i = k;
v[++n] = p;
percolate(n);
}
void erase(int k)
{
for (int i = 1; i <= n; i++)
{
if (v[i].i == k)
{
v[i] = v[n--];
sift(i);
return;
}
}
}
/*
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]);
}
}