Pagini recente » Cod sursa (job #2632991) | Cod sursa (job #473466) | Cod sursa (job #351632) | Cod sursa (job #1353784) | Cod sursa (job #1082579)
#include <cstdio>
#define vmax 1000000001
using namespace std;
struct heapnode{
int val;
int c;
};
heapnode a[400001];
int poz[400001],i,n,caz,v,t;
void change(int p1,int p2)
{
poz[a[p1].c]=p2;
poz[a[p2].c]=p1;
heapnode aux;
aux=a[p1];a[p1]=a[p2];a[p2]=aux;
}
void push(int x)
{
if(a[x].val<a[x/2].val){change(x,x/2);push(x/2);}
}
void pop(int x)
{
if(a[x/2].val==vmax){a[x].val=vmax;return;}
if(a[2*x].val<a[2*x+1].val){change(x,2*x);pop(2*x);}
else{change(x,2*x+1);pop(2*x+1);}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
for(i=1;i<=400000;i++){a[i].val=vmax;}
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&caz);
if(caz==3){printf("%ld\n",a[1]);}
if(caz==1){scanf("%d",&v);poz[++t]=i;a[i].val=v;a[i].c=t;push(i);}
if(caz==2){scanf("%d",&v);pop(poz[v]);}
}
return 0;
}