Pagini recente » Cod sursa (job #2758395) | Cod sursa (job #1626475) | Cod sursa (job #3151309) | Cod sursa (job #653770) | Cod sursa (job #1124137)
#include <cstdio>
using namespace std;
int k,a[200010],b[200010],c[200010];
void urc(int x)
{
int aux,q=x >> 1;
while (q!=0 && c[a[x]]<c[a[q]])
{
aux = a[x];
a[x] = a[q];
a[q] = aux;
b[a[x]] = x;
b[a[q]] = q;
x >>= 1;
q >>= 1;
}
}
void cobor(int x)
{
int aux, y = 0,w;
while (x != y)
{
y = x;
w = y << 1;
if (w<=k && c[a[x]]>c[a[w]]) x = w;
++w;
if (w<=k && c[a[x]]>c[a[w]]) x = w;
aux = a[x];
a[x] = a[y];
a[y] = aux;
b[a[x]] = x;
b[a[y]] = y;
}
}
int main()
{
int j,n,nr=0,w;
short e;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(j=0;j<n;++j)
{
scanf("%hd",&e);
if(e==1)
{
++k;
scanf("%d",&w);
++nr;
a[k]=nr;
b[nr]=k;
c[nr]=w;
urc(k);
}
else if(e==2)
{
scanf("%d",&w);
c[w]=-1;
urc(b[w]);
b[a[1]] = 0;
a[1] = a[k--];
b[a[1]] = 1;
if (k>1) cobor(1);
}
else
printf("%d\n",c[a[1]]);
}
return 0;
}