Pagini recente » Profil Djok | Cod sursa (job #1773959) | Cod sursa (job #2837814) | Cod sursa (job #2914301) | Cod sursa (job #2086641)
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,i,j,k,p,op,a[200001],b[200001],c[200001];
void pushup(int x)
{
int val;
val=b[a[x]];
while(x>1 && val<b[a[x/2]])
{
swap(a[x],a[x/2]);
c[a[x]]=x;
c[a[x/2]]=x/2;
x/=2;
}
}
void pushdown(int x)
{
int son;
do
{
son=0;
if(x*2<=m)
{
son=x*2;
if(x*2+1<=m && b[a[x*2+1]]<b[a[x*2]])
son=x*2+1;
if(b[a[son]]>=b[a[x]])
son=0;
}
if(son)
{
swap(a[son],a[x]);
swap(c[a[son]],c[a[x]]);
x=son;
}
}
while(son);
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d\n",&n);
while(n)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d",&k);
b[++p]=k;
a[++m]=p;
c[p]=m;
pushup(m);
}
else
if(op==2)
{
scanf("%d",&k);
int pos = c[k];
a[pos]=a[m];
c[a[pos]]=pos;
m--;
pushdown(pos);
pushup(pos);
}
else
if(op==3)
printf("%d\n",b[a[1]]);
n--;
}
return 0;
}