Pagini recente » Cod sursa (job #2981417) | Cod sursa (job #1721413) | Cod sursa (job #2116602) | Cod sursa (job #1359065) | Cod sursa (job #1022383)
#include<stdio.h>
int v[200010],poz[200010],h[200010],n,nr;
inline void swap(int &a,int &b)
{
int aux;
aux=a;a=b;b=aux;
}
inline void push()
{
int x,p;
scanf("%d",&x);
++n;++nr;
v[nr]=x;
poz[nr]=nr;
h[n]=nr;
p=n;
while(p/2 && v[p/2] > v[p])
{
swap(v[p],v[p/2]);
swap(h[p],h[p/2]);
poz[h[p]]=p;
poz[h[p/2]]=p/2;
p/=2;
}
}
inline void pop()
{
int x,p;
scanf("%d",&x);
x=poz[x];
swap(v[x],v[n]);
swap(h[x],h[n]);
--n;
while(1)
{
p=2*x;
if(p>n)
break;
if(v[p+1]<v[p] && (p+1)<=n)
++p;
if(v[p]>v[x])
break;
swap(v[p],v[x]);
swap(h[p],h[x]);
poz[v[x]]=x;
poz[v[p]]=p;
x=p;
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int m,i,op,x;
scanf("%d",&m);
while(m--)
{
scanf("%d",&op);
switch(op)
{
case 1:{push();break;}
case 2:{pop();break;}
case 3:{printf("%d\n",v[1]);break;}
}
}
return 0;
}