Pagini recente » Cod sursa (job #2057621) | Cod sursa (job #1251540) | Cod sursa (job #992499) | Cod sursa (job #15930) | Cod sursa (job #1160809)
#include<cstdio>
#define NMax 200005
using namespace std;
int H[NMax],Pos[NMax],V[NMax];
int HDim,Nr;
void push (int crt)
{
int aux;
while (crt/2 && V[H[crt]]<V[H[crt/2]])
{
aux=H[crt];
H[crt]=H[crt/2];
H[crt/2]=aux;
Pos[H[crt]]=crt;
Pos[H[crt/2]]=crt/2;
crt/=2;
}
}
void pop (int crt)
{
int aux,mini=0;
while (mini!=crt)
{
mini=crt;
if (2*crt<=HDim && V[H[2*crt]]<V[H[mini]])
mini=2*crt;
if (2*crt+1<=HDim && V[H[2*crt+1]]<V[H[mini]])
mini=2*crt+1;
aux=H[mini];
H[mini]=H[crt];
H[crt]=aux;
Pos[H[mini]]=mini;
Pos[H[crt]]=crt;
}
}
int main ()
{
int N,tip,i,x;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&N);
for (i=1; i<=N; i++)
{
scanf("%d",&tip);
if (tip==1)
{
scanf("%d",&x);
HDim++, Nr++;
V[Nr]=x;
H[HDim]=Nr;
Pos[Nr]=HDim;
push(HDim);
}
else if (tip==2)
{
scanf("%d",&x);
V[x]=-1;
push(Pos[x]);
Pos[x]=0;
H[1]=H[HDim--];
Pos[H[1]]=1;
if (HDim>1) pop(1);
}
else printf("%d\n",V[H[1]]);
}
return 0;
}