Pagini recente » Cod sursa (job #2455812) | Cod sursa (job #1583615) | Cod sursa (job #1450056) | Cod sursa (job #111376) | Cod sursa (job #1807810)
#include <cstdio>
using namespace std;
int H[200004],poz[200004],poz1[200004],aux,i,x,k,st,dr,n,cod,nr;
void HeapUp (int x)
{
if (x>1)
{
if (H[x]<H[x/2])
{
aux=H[x];
H[x]=H[x/2];
H[x/2]=aux;
aux=poz1[x];
poz1[x]=poz1[x/2];
poz1[x/2]=aux;
aux=poz[poz1[x]];
poz[poz1[x]]=poz[poz1[x/2]];
poz[poz1[x/2]]=aux;
HeapUp(x/2);
}
}
}
void HeapDown (int x)
{
int i,aux;
if (2*x<=k)
{
st=H[2*x];
if (2*x<k)
dr=H[2*x+1];
else
dr=st+1;
if (dr<st)
i=2*x+1;
else
i=2*x;
if (H[i]<H[x])
{
aux=H[x];
H[x]=H[i];
H[i]=aux;
aux=poz1[x];
poz1[x]=poz1[i];
poz1[i]=aux;
aux=poz[poz1[x]];
poz[poz1[x]]=poz[poz1[i]];
poz[poz1[i]]=aux;
HeapDown(i);
}
}
}
int main()
{
freopen ("heapuri.in","r",stdin);
freopen ("heapuri.out","w",stdout);
scanf ("%d", &n);
for (i=1;i<=n;i++)
{
scanf ("%d", &cod);
if (cod==1)
{
scanf ("%d", &x);
k++;
poz[++nr]=k;
poz1[k]=nr;
H[k]=x;
HeapUp(k);
}
else if (cod==2)
{
scanf ("%d", &x);
H[poz[x]]=H[k];
poz1[poz[x]]=poz1[k];
poz[poz1[k]]=poz[x];
k--;
HeapDown(poz[x]);
}
else
printf ("%d\n", H[1]);
}
return 0;
}