Pagini recente » Cod sursa (job #371604) | Cod sursa (job #1013233) | Cod sursa (job #888073) | Cod sursa (job #3142650) | Cod sursa (job #1756901)
#include <cstdio>
#define NMAX 200009
using namespace std;
int tip,n,l,nr,heap[NMAX],pos[NMAX],a[NMAX];
void push(int x){
int aux;
while(x/2&&a[heap[x]]<a[heap[x/2]]){
aux=heap[x];
heap[x]=heap[x/2];
heap[x/2]=aux;
pos[heap[x]]=x;
pos[heap[x/2]]=x/2;
x=x>>1;
}
}
void pop(int x){
int aux,y=0;
while(x!=y){
y=x;
if(y*2<=l&&a[heap[x]]>a[heap[y*2]]) x=y*2;
if(y*2+1<=l&&a[heap[x]]>a[heap[y*2+1]]) x=y*2+1;
aux=heap[x];
heap[x]=heap[y];
heap[y]=aux;
pos[heap[x]]=x;
pos[heap[y]]=y;
}
}
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
int x;
scanf("%d", &n);
for(int i=1;i<=n;++i){
scanf("%d", &tip);
if(tip<3) scanf("%d", &x);
if(tip==1){
++l,++nr;
a[nr]=x;
heap[l]=nr;
pos[nr]=l;
push(l);
continue ;
}
if(tip==2){
a[x]=-1;
push(pos[x]);
pos[heap[1]]=0;
heap[1]=heap[l--];
pos[heap[1]]=1;
if(l>1) pop(1);
continue ;
}
if(tip==3) printf("%d\n",a[heap[1]]);
}
return 0;
}