Pagini recente » Cod sursa (job #1623758) | Cod sursa (job #1909502) | Cod sursa (job #1914058) | Cod sursa (job #2197698) | Cod sursa (job #1189832)
#include <cstdio>
FILE*f=fopen("heapuri.in","r");
FILE*g=fopen("heapuri.out","w");
int h[20000001],d[20000001],si,n,poz[20000001],m;
inline void schimb(int i,int j){
int aux=h[i];
h[i]=h[j];
h[j]=aux;
poz[h[i]]=i;
poz[h[j]]=j;
}
void up(int x){
while ( d[h[x]]<d[h[(x+1)/3]]&&x>1 ){
schimb(x,(x+1)/3);
x=(x+1)/3;
}
}
void down(int x){
int top=x*3-1,mid=x*3,bot=x*3+1,lane=x;
if ( d[h[top]]<d[h[lane]]&&top<=si )lane=top;
if ( d[h[mid]]<d[h[lane]]&&mid<=si )lane=mid;
if ( d[h[bot]]<d[h[lane]]&&bot<=si )lane=bot;
if ( lane==x )return;
schimb(lane,x);
down(lane);
}
void ins(int x){
h[++si]=x;
poz[x]=si;
up(si);
down(si);
}
void del(int x){
schimb(x,si);
--si;
down(x);
}
int main(){
fscanf(f,"%d",&n);
for ( int i=1;i<=n;++i ){
int t;
fscanf(f,"%d",&t);
if ( t==1 ){
int a;
fscanf(f,"%d",&a);
d[++m]=a;
ins(m);
}
if ( t==2 ){
int a;
fscanf(f,"%d",&a);
del(poz[a]);
}
if ( t==3 ){
fprintf(g,"%d\n",d[h[1]]);
}
}
return 0;
}