Pagini recente » Cod sursa (job #1309624) | Cod sursa (job #1662366) | Cod sursa (job #980161) | Cod sursa (job #1745241) | Cod sursa (job #1144660)
#include <cstdio>
using namespace std;
int heap[400001],t,c,x,v[200001],poz[200001],k;
void change(int p1, int p2)
{
int aux;
aux=poz[heap[p1]];
poz[heap[p1]]=poz[heap[p2]];
poz[heap[p2]]=aux;
aux=heap[p1];
heap[p1]=heap[p2];
heap[p2]=aux;
}
void upheap(int p)
{
if((v[heap[p/2]]==0)||(v[heap[p/2]]>v[heap[p]])){
change(p,p/2);
upheap(p/2);
}
}
void downheap(int p)
{
if((heap[p*2])||(heap[p*2+1])){
if((heap[p*2]==0)&&(v[heap[p*2+1]])){change(p,2*p+1);downheap(2*p+1);return;}
if((v[heap[p*2]])&&(heap[p*2+1]==0)){change(p,2*p);downheap(2*p);return;}
if(v[heap[p*2]]>v[heap[p*2+1]]){change(p,2*p+1);downheap(2*p+1);return;}
if(v[heap[p*2]]<=v[heap[p*2+1]]){change(p,2*p);downheap(2*p);return;}
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%ld",&t);v[0]=-1;
while(t--){
scanf("%d",&c);
if(c==1){
scanf("%ld",&v[++k]);
heap[k]=k;poz[k]=k;
upheap(k);
}
if(c==2){
scanf("%ld",&x);
v[x]=0;downheap(poz[x]);
}
if(c==3){
printf("%ld\n",v[heap[1]]);
}
}
return 0;
}