Pagini recente » Cod sursa (job #1320449) | Cod sursa (job #2316895) | Cod sursa (job #1644674) | Cod sursa (job #2055942) | Cod sursa (job #1242722)
# include <cstdio>
# include <algorithm>
using namespace std;
struct da
{
int val,p;
};
da a[200001];
int m=0,n,i,COMANDA,pozitie,x,L;
int poz[200001];
void swapp(int m,int t)
{
swap(a[m].val,a[t].val);
swap(a[m].p,a[t].p);
swap(poz[a[m].p],poz[a[t].p]);
}
void HeapUp (int m)
{
if (m<=1) return;
if (a[m].val<a[m/2].val)
{
swapp(m,m/2);
HeapUp(m/2);
}
}
void HeapDown(int r,int m)
{
int st,dr;
if (2*r<=m)
{
st=a[2*r].val;
if (2*r+1<=m)dr=a[2*r+1].val;
else dr=st+1;
if (st<=dr)
{
if (st<a[r].val)
{
swapp(2*r,r);
HeapDown(2*r,m);
}
}
else
{
if (dr<a[r].val)
{
swapp(2*r+1,r);
HeapDown(2*r+1,m);
}
}
}
}
int main ()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++)
{
scanf("%d",&COMANDA);
if (COMANDA==1)
{
pozitie++;
scanf("%d",&x);
a[++m].val=x;
a[m].p=pozitie;
poz[pozitie]=m;
HeapUp(m);
}
if (COMANDA==2)
{
scanf("%d",&x);
L=poz[x];
swapp(poz[x],m);
m--;
HeapDown(L,m);
}
if (COMANDA==3)
{
printf("%d\n",a[1].val);
}
}
return 0;
}