Pagini recente » Cod sursa (job #1084738) | Cod sursa (job #1269996) | Cod sursa (job #2948459) | Cod sursa (job #1792561) | Cod sursa (job #336278)
Cod sursa(job #336278)
#include<stdio.h>
long h[200010],v[200010],poz[200010];
long aux,n,i,j,k,x,a;
void up(long i)
{
if(v[0]==1)
return;
while(i>1)
{
if(v[h[i]]<v[h[i/2]])
{
aux=poz[h[i]];poz[h[i]]=poz[h[i/2]];poz[h[i/2]]=aux;
aux=h[i];h[i]=h[i/2];h[i/2]=aux;
i=i/2;
}
else return;
}
}
void down()
{
while(1)
{
if(2*j>h[0]) return;
aux=poz[h[j]];poz[h[j]]=poz[h[j*2]];poz[h[j*2]]=aux;
aux=h[j];h[j]=h[j*2];h[j*2]=aux;
j=j*2;
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;++i)
{
scanf("%d",&x);
if(x<3) scanf("%ld",&a);
if(x==1)
{
v[0]++;v[v[0]]=a;
h[++h[0]]=v[0];
poz[h[0]]=h[0];
up(v[0]);
}
if(x==2)
{
j=poz[a];
down();
aux=poz[h[j]];poz[h[j]]=poz[h[h[0]]];poz[h[h[0]]]=aux;
aux=h[j];h[j]=h[h[0]];h[h[0]]=aux;
h[0]--; if(j!=h[0]+1) up(j);
}
if(x==3) printf("%ld\n",v[h[1]]);
}
return 0;
}