Cod sursa(job #369962)

Utilizator krateCiurdariu Dan krate Data 29 noiembrie 2009 21:39:14
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
//heapuri
#include<fstream.h>

long h[200000],n,a[200000],l,l2;

ifstream f("heapuri.in");
ofstream g("heapuri.out");

void combheap(int i,int n)
{
	int v=h[i];
	int tata=i;
	int fiu=2*i;
	while(fiu<=n)
	{
		if(fiu<n)
			if(h[fiu]>h[fiu+1]) fiu++;
		if(v>h[fiu])
		{
			h[tata]=h[fiu];
			tata=fiu;
			fiu=fiu*2;
		}
		else fiu=n+1;
	}
	h[tata]=v;
}

void creareheap()
{
	int i;
	for(i=l2/2;i;i--)
		combheap(i,l2);
}

void insert(int x)
{
	l2++;
	h[l2]=x;
	l++;
	a[l]=x;
	creareheap();
}

void extract(int poz)
{
	h[poz]=h[l2];
	l2--;
	creareheap();
}
void stergere(int x)
{
	int i;
	int ok=1;
	for(i=1;i<=l2&&ok==1;i++)
	{
		if(a[x]==h[i]) ok=0;
	}
	extract(i-1);
}


void direct()
{
	int o,c,i;
	f>>n;
	for(i=1;i<=n;i++)
		{
			f>>o;
			if(o==1) {	f>>c; insert(c); }
			else if(o==2) {	f>>c; stergere(c); }
				 else  if(o==3) g<<h[1]<<"\n";
		}
}

int main()
{
	direct();
	return 0;
}