Pagini recente » Cod sursa (job #1218160) | Cod sursa (job #2507188) | Cod sursa (job #629299) | Cod sursa (job #1963999) | Cod sursa (job #1182515)
#include<cstdio>
#include<algorithm>
#define pr(a) (a/2)
#define stg(a) (a*2)
#define drt(a) (a*2+1)
using namespace std;
int nr,l;
int H[200005],v[200005],pos[200005];
void push(int k)
{
while (k/2>0 && v[H[k]]<v[H[pr(k)]])
{
swap(H[k],H[pr(k)]);
pos[H[k]]=k;
pos[H[pr(k)]]=k/2;
k=k/2;
}
}
void pop(int x)
{
int y=0;
while (x!=y)
{
y=x;
int st=stg(y);
int dr=drt(y);
if (st<=l && v[H[x]]>v[H[st]]) x=st;
if (dr<=l && v[H[x]]>v[H[dr]]) x=dr;
swap(H[x],H[y]);
pos[H[x]]=x;
pos[H[y]]=y;
}
}
int main()
{
int i,n,op,x;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
{
scanf("%d",&op);
if (op==1)
{
scanf("%d",&x);
++nr;v[nr]=x;
++l;H[l]=nr;
pos[nr]=l;
push(l);
}
else
if (op==2)
{
scanf("%d",&x);
v[x]=-1;
push(pos[x]);
pos[H[1]]=0;
H[1]=H[l--];
pos[H[1]]=1;
if (l>1) pop(1);
}
else printf("%d\n",v[H[1]]);
}
return 0;
}