Pagini recente » Cod sursa (job #269840) | Cod sursa (job #824101) | Cod sursa (job #690249) | Cod sursa (job #711914) | Cod sursa (job #1162692)
#include <cstdio>
#define Nmax 200005
using namespace std;
int H[Nmax],t[Nmax],poz[Nmax];
inline void Swap(int i, int j)
{
int ti=t[i],tj=t[j],pozi=poz[i],pozj=poz[j],hi=H[i],hj=H[j];
H[i]=hj; H[j]=hi;
t[i]=tj; t[j]=ti;
poz[tj]=i; poz[ti]=j;
}
inline void UpHeap(int k)
{
int tata=k/2;
while(k>1 && H[tata]>H[k])
{
Swap(tata,k);
k=tata; tata=k/2;
}
}
inline void DownHeap(int k)
{
int fiu=2*k,gata=0;
while(k<=H[0]/2 && !gata)
{
if(fiu+1<=H[0] && H[fiu+1]<H[fiu])
++fiu;
if(H[k]<=H[fiu])
gata=1;
else
{
Swap(k,fiu);
k=fiu; fiu=2*k;
}
}
}
int main()
{
int M,i,x,tip,cnt=0;
freopen ("heapuri.in","r",stdin);
freopen ("heapuri.out","w",stdout);
scanf("%d", &M);
for(i=1;i<=M;++i)
{
scanf("%d", &tip);
if(tip==1)
{
scanf("%d", &x);
H[++H[0]]=x;
t[H[0]]=++cnt; poz[cnt]=H[0];
UpHeap(H[0]);
}
else
if(tip==2)
{
scanf("%d", &x);
H[poz[x]]=H[H[0]--];
UpHeap(poz[x]);
DownHeap(poz[x]);
}
else
printf("%d\n", H[1]);
}
return 0;
}