Pagini recente » Profil vladcorjuc | Cod sursa (job #2002076) | Joben | Istoria paginii utilizator/theromulus | Cod sursa (job #417943)
Cod sursa(job #417943)
#include<stdio.h>
int h[200001],n,c[200001];
void up(int i,const int j)
{
int t,x;
while(h[i/2]>h[i] && i>1)
{
t=h[i];
h[i]=h[i/2];
h[i/2]=t;
i/=2;
// t=c[j];
c[i]=c[j];
c[j]=i;
// x=j/2;
}
}
void dn(int i)
{
int u=i,t;
while(i)
{
if(i*2<=h[0] && h[i*2]>h[i])
u=i*2;
if( i*2+1<=h[0] && h[i*2+1]<h[u])
u=i*2+1;
if(u==i)
break;
t=h[u];
h[u]=h[i];
h[i]=t;
i=u;
}
h[0]--;
}
void cit()
{
scanf("%d",&n);
int i,m,x,j=1;
for(i=1; i<=n; i++)
{
scanf("%d",&x);
if(x==3)
printf("%d\n",h[1]);
if(x==1)
{
scanf("%d",&m);
h[j]=m;
h[0]++;
c[j]=j;
up(j,j);
j++;
}
if(x==2)
{
scanf("%d",&m);
dn(c[m]);
}
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
cit();
//rez();
//afis();
return 0;
}