Cod sursa(job #302527)

Utilizator HaggisRanca Razvan Haggis Data 8 aprilie 2009 23:27:48
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int v[200010],n,x,y,i,a[200010],k,k1,b[200010];

void corecteaza(int nod)
{
	if(v[nod]<v[nod/2] && v[nod/2])
	{
		swap(v[nod],v[nod/2]);
		swap(b[nod],b[nod/2]);
		corecteaza(nod/2);
	}
}	
		
void updateaza(int nod)
{
	if(2*nod<k)
	{
		if(v[2*nod]<v[2*nod+1])
		{
			swap(v[nod],v[2*nod]);
			updateaza(2*nod);
		}
		else
		{
			swap(v[nod],v[2*nod+1]);
			updateaza(2*nod+1);
		}
	}
	else
		if(2*nod==k)
			swap(v[nod],v[2*nod]);
}
int main()
{
in>>n;
	for(i=1;i<=n;i++)
	{
		b[i]=i;
		in>>x;
		if(x==3)
			out<<v[1]<<"\n";
		else
		{
			in>>y;
			if(x==1)
				{
					a[++k]=y;
					v[++k1]=y;
					corecteaza(k1);
				}
			else
			{
				v[b[a[y]]]=0;
				updateaza(b[a[y]]);
				k--;
			}
		}
	}
	return 0;
}