Pagini recente » Cod sursa (job #2914787) | Cod sursa (job #1468774) | Cod sursa (job #1883458) | Cod sursa (job #2232591) | Cod sursa (job #1048242)
#include <stdio.h>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define N 200000
int A[N],*a=A-1;
int P[N],*p=P-1;
int PB[N],*pb=PB-1;
int s=0,C=0;
void push(int x){
int i=++s;
while(i>1&&a[i>>1]>x){
a[i]=a[i>>1];
p[pb[i>>1]]=i;
pb[i]=pb[i>>1];
i>>=1;
}
p[++C]=i;
pb[i]=C;
a[i]=x;
}
void del(int x){
int i=p[x];
a[i]=a[s];
pb[i]=pb[s];
p[pb[s]]=i;
s--;
int s2=s>>1;
while(i<=s2){
int l=i<<1,r=l+1,m;
m=(l<=s&&a[l]<a[i])?l:i;
m=(r<=s&&a[r]<a[m])?r:m;
if(m==i)return;
a[i]^=a[m]^=a[i]^=a[m];
p[pb[i]]=m;
p[pb[m]]=i;
pb[i]^=pb[m]^=pb[i]^=pb[m];
i=m;
}
}
int main(){
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int n,x,y;
scanf("%i",&n);
fr(i,0,n){
scanf("%i",&x);
if(x==3) printf("%i\n",a[1]);
else{
scanf("%i",&y);
if(x==1) push(y);
else del(y);
}
}
return 0;
}