Cod sursa(job #426436)

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

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()
{
	int i;
	for (i=1;i<=n;i++)
		v[i]=sir[i];
	for (i=n/2;i;i--)
		redo(i);
}

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

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

int minim()
{
	make();
	return v[1];
}

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;
}