Cod sursa(job #417943)

Utilizator laurenttlaurentiu pavel laurentt Data 15 martie 2010 10:12:53
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#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;
}