Cod sursa(job #425972)

Utilizator mihai995mihai995 mihai995 Data 26 martie 2010 12:16:53
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
using namespace std;
int v[1<<18],n;

void redo(int x)
{
	int l=2*x,r=2*x+1,maxim=x,aux;
	if (v[l]>v[maxim])
		maxim=l;
	if (v[r]>v[maxim])
		maxim=l;
	if (x!=maxim)
	{
		aux=v[maxim];
		v[maxim]=v[x];
		v[x]=aux;
		redo(maxim);
	}
}

void make()
{
	for (int i=n/2;i;i--)
		redo(i);
}

void add(int x)
{
	v[++n]=x;
	make();
}

void remove(int x)
{
	v[x]=v[n--];
	make();
}

int minim()
{
	int minim=2000000000,i;
	for (i=1;i<=n;i++)
		if (minim>v[i])
			minim=v[i];
	return minim;
	
}

int main()
{
	int nr,x;
	ifstream in("heapuri.in");
	ofstream out("heapuri.out");
	in>>nr;
	while (nr--)
	{
		in>>x;
		switch(x)
		{
		case 1:in>>x;add(x);break;
		case 2:in>>x;remove(x);break;
		case 3:out<<minim()<<"\n";break;
		}
	}
	return 0;
}