Cod sursa(job #729783)

Utilizator iulynaCretu Irina iulyna Data 30 martie 2012 02:06:21
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<iostream>
#include<fstream>
using namespace std;
class heap
{
public:
	int z[200002];
	int k;
	
	void insert(int a)
	{
		z[++k]=a;
		int p=k,aux;
		while(p>=1&&z[p/2]>a)
		{
			aux=z[p/2];
			z[p/2]=z[p];
			z[p]=aux;
			p=p/2;
		}
	}
	void remove(int p)
	{
		z[p]=z[k];
		k--;
		int aux,u;
		while(1)
		{
			u=p;
			if(z[p]>z[p*2]&&p*2<=k)
				u=u*2;
			if(z[p]>z[p*2+1]&&p*2+1<=k)
				u=u*2+1;
			if(u==p)
				break;
			aux=z[u];z[u]=z[p];z[p]=aux;
			p=u;
		}
	}
};

int n,x[200002],a,b;
int main()
{
	freopen("heapuri.in","r",stdin);
	freopen("heapuri.out","w",stdout);
	heap h;
	h.k=0;
	scanf("%d",&n);
	int i,j,l=0;
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a);
		if(a==1)
		{
			l++;
			scanf("%d",&x[l]);
			h.insert(x[l]);
		}
		else
			if(a==2)
			{
				scanf("%d",&b);
				for(j=1;h.z[j]!=x[b];j++);
				h.remove(j);
			}
			else
				printf("%d\n",h.z[1]);
	}
	
	
	return 0;
}