Pagini recente » Cod sursa (job #1376198) | Cod sursa (job #3281192) | Cod sursa (job #2619671) | Cod sursa (job #1135782) | Cod sursa (job #335383)
Cod sursa(job #335383)
#include<stdio.h>
long h[200010],nr[200010];
long aux,n,i,j,k,x,a;
void up(long i)
{
if(k==1)
return;
while(i>1)
{
if(h[i]<h[i/2])
{
aux=h[i];h[i]=h[i/2];h[i/2]=aux;
aux=nr[i];nr[i]=nr[i/2];nr[i/2]=aux;
i=i/2;
}
else return;
}
}
long down(long j)
{
while(1)
{
if(2*j>k) return j;
aux=h[j];h[j]=h[j*2];h[j*2]=aux;
aux=nr[j];nr[j]=nr[j*2];nr[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==1)
{
scanf("%ld",&a);
k++;h[k]=a;nr[k]=k;
up(k);
}
if(x==2)
{
scanf("%ld",&a);
for(j=1;j<=k;++j) if(nr[j]==a) break;
j=down(j);
aux=h[j];h[j]=h[k];h[k]=aux;
aux=nr[j];nr[j]=nr[k];nr[k]=aux;
k--; if(j!=k+1) up(j);
}
if(x==3) printf("%ld\n",h[1]);
}
}