Pagini recente » Cod sursa (job #2589232) | Cod sursa (job #1617200) | Cod sursa (job #2624379) | Cod sursa (job #822634) | Cod sursa (job #1052948)
#include <stdio.h>
#include <stdlib.h>
int H[1000001],n,ret[1000001],rn,pos[1000001],x;
int father(int nod){return nod>>1;}
int right_son(int nod){return (nod<<1)+1;}
int left_son(int nod){return nod<<1;}
int min(){return ret[H[1]];}
void swap(int nod1,int nod2)
{
int aux;
aux = H[nod1];
H[nod1] = H[nod2];
H[nod2] = aux;
pos[H[nod1]] = nod1;
pos[H[nod2]] = nod2;
}
void up(int nod)
{
if(nod==1 || ret[H[nod]]>=ret[H[father(nod)]]) return;
swap(nod,father(nod));
up(father(nod));
}
void dw(int nod)
{
if(left_son(nod)>n || !H[nod]) return;
if(ret[H[nod]]>ret[H[left_son(nod)]] && ret[H[nod]]>ret[H[right_son(nod)]] && ret[H[left_son(nod)]]<ret[H[right_son(nod)]])
{
swap(nod,left_son(nod));
dw(left_son(nod));
}
else
{
if(ret[H[nod]]>ret[H[left_son(nod)]] && ret[H[nod]]>ret[H[right_son(nod)]])
{
swap(nod,right_son(nod));
dw(right_son(nod));
}
else
{
if(ret[H[nod]]>ret[H[left_son(nod)]])
{
swap(nod,left_son(nod));
dw(left_son(nod));
}
else
{
if(ret[H[nod]]>ret[H[right_son(nod)]])
{
swap(nod,right_son(nod));
dw(right_son(nod));
}
}
}
}
}
void INS()
{
ret[++rn] = x;
H[++n] = rn;
pos[rn] = n;
up(n);
}
void DEL()
{
H[pos[x]] = H[n];
n--;
if(pos[x]>1 && H[pos[x]]<H[father(pos[x])])
up(pos[x]);
else
dw(pos[x]);
}
int main()
{
int i,nr,op;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&nr);
while(nr--)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d",&x);
INS();
}
if(op==2)
{
scanf("%d",&x);
DEL();
}
if(op==3)
{
printf("%d\n",min());
}
}
return 0;
}