Pagini recente » Cod sursa (job #2822197) | Cod sursa (job #1118465) | Cod sursa (job #1047299) | Cod sursa (job #852608) | Cod sursa (job #1116422)
#include <stdio.h>
#define maxn 200000
struct heapItem
{
int val, ind;
}H[maxn];
int l, nr;
int pos[maxn];
int n;
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)
{
while((H[i/2].val > H[i].val) && i/2>0)
{
swp(i, i/2);
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(nr);
}
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);
switch(op)
{
case 1:
scanf("%d", &x);
add(x);
break;
case 2:
scanf("%d", &x);
del(pos[x]);
break;
case 3:
printf("%d\n", H[1].val);
}
}
return 0;
}