Cod sursa(job #361357)

Utilizator proflaurianPanaete Adrian proflaurian Data 4 noiembrie 2009 19:31:12
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
#include<utility>
#define SWAP AUX=H[F];H[F]=H[T];H[T]=AUX;P[H[F].I]=F;P[H[T].I]=T
#define UP for(;T&&H[F].V<H[T].V;){SWAP;F>>=1;T>>=1;}
#define DOWN for(;;){F=T<<1;if(F>L)break;if(F<L) if(H[F+1].V<H[F].V)F++;if(H[T].V<=H[F].V)break;SWAP;T=F;}
#define V first
#define I second
#define LG 200100
using namespace std;
pair<int,int> H[LG],AUX;
int n,c,x,i,L,F,T,P[LG],INS(),DEL();
void read(),solve();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("heapuri.in","r",stdin);
	freopen("heapuri.out","w",stdout);
	scanf("%d",&n);
}
void solve()
{
	for(;n;n--)
    {
		scanf("%d",&c);
		if(c==3){printf("%d\n",H[1].V);continue;}
        scanf("%d",&x);
		c==1?INS():DEL();		      
    }
}
int INS(){;H[++L].V=x;H[L].I=++i;P[i]=L;F=L;T=F>>1;UP;return 0;}
int DEL(){	i=P[x];T=i;F=L;SWAP;L--;F=i;T=F>>1;UP;T=i;DOWN;return 0;}