Pagini recente » Cod sursa (job #602802) | Cod sursa (job #279418) | Cod sursa (job #2780972) | Cod sursa (job #1163359) | Cod sursa (job #249596)
Cod sursa(job #249596)
#include<stdio.h>
long n,lh,ll,i,aa,p;
long a[200100],h[200100],hp[200100];
void push(long A)
{long hh;
while(A/2&&a[h[A]]<a[h[A/2]])
{hh=h[A];h[A]=h[A/2];h[A/2]=hh;
hp[h[A]]=A;hp[h[A/2]]=A/2;A/=2;}
}
void pop(long A)
{long hh,aa=0;
while(A!=aa)
{aa=A;
if(aa*2<=lh&&a[h[A]]>a[h[aa*2]])A=aa*2;
if(aa*2+1<=lh&&a[h[A]]>a[h[aa*2+1]])A=aa*2+1;
hh=h[A];h[A]=h[aa];h[aa]=hh;
hp[h[A]]=A;hp[h[aa]]=aa;}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
{scanf("%ld",&p);
if(p<3)
scanf("%ld",&aa);
if(p==1)
{lh++,ll++;
a[ll]=aa;
h[lh]=ll;
hp[ll]=lh;
push(lh);}
if(p==2)
{a[aa]=-1;push(hp[aa]);
hp[h[1]]=0;h[1]=h[lh--];
hp[h[1]]=1;
if(lh>1)pop(1);}
if(p==3)printf("%ld\n", a[h[1]]);
}
return 0;
}