Pagini recente » Cod sursa (job #313777) | Cod sursa (job #1481988) | Cod sursa (job #1051803) | Cod sursa (job #1481810) | Cod sursa (job #1116454)
#include <stdio.h>
#define maxn 200000
struct heapItem
{
int val, ind;
}H[maxn];int l;
int pos[maxn];
int n, nr;
void swp(int a,int b)
{
pos[H[a].ind]=b;
pos[H[b].ind]=a;
heapItem aux = H[a];
H[a] = H[b];
H[b] = aux;
}
void upheap(int i)
{
if(i/2>=1 && H[i/2].val>H[i].val)
{
swp(i,i/2);
upheap(i/2);
}
}
void downheap(int i)
{
if(2*i+1 <= l && H[i].val > H[2*i+1].val && H[2*i+1].val <= H [2*i].val)
{
swp(i,2*i+1);
downheap(2*i+1);
}
else if(2*i<=l && H[i].val > H[2*i].val)
{
swp(i,2*i);
downheap(2*i);
}
}
void add(int nod)
{
pos[++nr] = ++l;
H[l].val = nod;
H[l].ind = nr;
upheap(l);
}
void del(int nod)
{
swp(nod,l--);
downheap(nod);
}
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
int op, x;
scanf("%d", &n);
while(n--)
{
scanf("%d", &op);
if(op==1)
{
scanf("%d", &x);
add(x);
}
if(op==2)
{
scanf("%d", &x);
del(pos[x]);
}
if(op==3)
{
printf("%d\n", H[1].val);
}
}
return 0;
}