Cod sursa(job #820309)

Utilizator krissu93FMI Tiugan Cristiana Elena krissu93 Data 20 noiembrie 2012 18:20:55
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#define max 200020
using namespace std;

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

int N,l,nr;
int v[max],h[max],pos[max];

void schimba(int i, int j)
{
	int aux;
	aux=h[i];
	h[i]=h[j];
	h[j]=aux;
	
	pos[h[i]]=i;
	pos[h[j]]=j;
}

void urca(int i)
{
	if ( i/2>0 && v[h[i]]<v[h[i/2]])
	{
		schimba(i,i/2);
		urca(i/2);
	}
}

void coboara (int i)
{
	int fst=2*i;
	int fdr=2*i+1;
	int fbun=i;
	if (fst<=nr && v[h[fst]]<v[h[fbun]]) fbun=fst;
	if (fdr<=nr && v[h[fdr]]<v[h[fbun]]) fbun=fdr;
	if (fbun!=i)
	{
		schimba(i,fbun);
		coboara(fbun);
	}
}

int main()
{
	int i,n,cod,a,p,nv=0;
	in>>n;
	for (i=1;i<=n;i++)
	{
		in>>cod;
		if (cod==3) out<<v[h[1]]<<"\n";
		else
		if (cod==1)
		{
			in>>a;
			v[++nv]=a;
			h[++nr]=nv;
			pos[nv]=nr;
			urca(nr);
		}
		else
		if (cod==2)
		{
			in>>a;
			p=pos[a];
			h[p]=h[nr--];
			pos[h[p]]=p;
			urca(p);
			coboara(p);
		}
	}
	return 0;
}