Pagini recente » Cod sursa (job #2782429) | Cod sursa (job #931413) | Cod sursa (job #334224) | Cod sursa (job #2813826) | Cod sursa (job #361370)
Cod sursa(job #361370)
#include<stdio.h>
#include<utility>
#define SWAP AUX=H[F];H[F]=H[T];H[T]=AUX;P[H[F].I]=F;P[H[T].I]=T
#define UP for(;T&&(H[F].V<H[T].V);){SWAP;F>>=1;T>>=1;}
#define DOWN for(;;){F=T<<1;if(F>L)break;if(F<L)if(H[F+1].V<H[F].V)F++;if(H[T].V<=H[F].V)break;SWAP;T=F;}
#define V first
#define I second
#define LG 200100
using namespace std;
pair<int,int> H[LG],AUX;
int n,c,x,i,j,L,F,T,P[LG],INS(),DEL();
void read(),solve();
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
}
void solve()
{
for(;n;n--)
{
scanf("%d",&c);
if(c==3){printf("%d\n",H[1].V);continue;}
scanf("%d",&x);
c==1?INS():DEL();
}
}
int INS(){H[++L].V=x;H[L].I=++i;P[i]=L;F=L;T=F>>1;UP;return 0;}
int DEL(){j=P[x];H[j]=H[L--];F=j;T=F>>1;UP;T=j;DOWN;return 0;}