Cod sursa(job #302569)

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

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