Cod sursa(job #1155765)

Utilizator iarbaCrestez Paul iarba Data 27 martie 2014 10:23:18
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
using namespace std;
int heap[524301],a[524301],ph[524301],t,n,poz,i,caz;
void change(int n1, int n2)
{
	int aux=ph[heap[n1]];
	ph[heap[n1]]=ph[heap[n2]];
	ph[heap[n2]]=aux;
	aux=heap[n1];
	heap[n1]=heap[n2];
	heap[n2]=aux;
}
void push(int nod)
{
	if(a[heap[nod/2]]>a[heap[nod]]){
		change(nod/2,nod);
		push(nod/2);
								   }
}
void pop(int nod)
{
	if((a[heap[nod*2]]<a[heap[nod*2+1]])&&(a[heap[nod*2]]<a[heap[nod]])){
		change(nod*2,nod);
		pop(nod*2);
																		}
	if((a[heap[nod*2+1]]<a[heap[nod*2]])&&(a[heap[nod*2+1]]<a[heap[nod]])){
		change(nod*2+1,nod);
		pop(nod*2+1);
																		}
}
int main()
{
	freopen("heapuri.in","r",stdin);
	freopen("heapuri.out","w",stdout);
	scanf("%ld",&t);
	for(i=1;i<=524300;i++){
		heap[i]=i;a[i]=200001;ph[i]=i;
					 }
	a[0]=-1;
	while(t--){
		scanf("%ld",&caz);
		if(caz==1){
			scanf("%ld",&a[++n]);
			push(ph[n]);
				  }
		if(caz==2){
			scanf("%ld",&poz);
			a[poz]=200001;
			pop(ph[poz]);
				  }
		if(caz==3){
			printf("%ld\n",a[heap[1]]);
				  }
			  }
return 0;
}