Cod sursa(job #1082579)

Utilizator iarbaCrestez Paul iarba Data 14 ianuarie 2014 19:45:00
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#define vmax 1000000001
using namespace std;
struct heapnode{
	int val;
	int c;
			   };
heapnode a[400001];
int poz[400001],i,n,caz,v,t;
void change(int p1,int p2)
{
	poz[a[p1].c]=p2;
	poz[a[p2].c]=p1;
	heapnode aux;
	aux=a[p1];a[p1]=a[p2];a[p2]=aux;
	
}
void push(int x)
{
	if(a[x].val<a[x/2].val){change(x,x/2);push(x/2);}
}
void pop(int x)
{
	if(a[x/2].val==vmax){a[x].val=vmax;return;}
	if(a[2*x].val<a[2*x+1].val){change(x,2*x);pop(2*x);}
	else{change(x,2*x+1);pop(2*x+1);}
}
int main()
{
	freopen("heapuri.in","r",stdin);
	freopen("heapuri.out","w",stdout);
	for(i=1;i<=400000;i++){a[i].val=vmax;}
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%d",&caz);
		if(caz==3){printf("%ld\n",a[1]);}
		if(caz==1){scanf("%d",&v);poz[++t]=i;a[i].val=v;a[i].c=t;push(i);}
		if(caz==2){scanf("%d",&v);pop(poz[v]);}
					 }
return 0;
}