Pagini recente » Cod sursa (job #234380) | Cod sursa (job #2269097) | Cod sursa (job #2386795) | Cod sursa (job #524844) | Cod sursa (job #1239484)
#include <cstdio>
#include <algorithm>
using namespace std;
struct da
{
int val,poz;
};
da a[200001];
int n,instr,com,poz[200001],i,x,xx;
void swapp(int x,int y)
{
swap(a[x].val,a[y].val);
swap(a[x].poz,a[y].poz);
swap(poz[a[x].poz],poz[a[y].poz]);
}
void heapup(int nn)
{
if (nn<=1) return ;
if (a[nn/2].val>a[nn].val)
{
swapp(nn/2,nn);
heapup(nn/2);
}
}
void heapdown(int n,int r)
{
int st,dr;
if (2*r<=n)
{
st=a[2*r].val;
if (2*r+1<=n)dr=a[2*r+1].val;
else dr=st+1;
if (st<=dr)
{
if (a[2*r].val<a[r].val)
{
swapp(r,2*r);
heapdown(n,2*r);
}
}
else if (st>dr)
{
if (a[2*r+1].val<a[r].val)
{
swapp(r,2*r);
heapdown(n,2*r+1);
}
}
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d ",&instr);
for (i=1; i<=instr; i++)
{
scanf("%d ",&com);
if (com==1)
{
scanf("%d ",&x);
a[++n].val=x;
a[n].poz=n;
poz[n]=n;
heapup(n);
}
else if (com==2)
{
scanf("%d ",&x);
xx=poz[x];
swapp(xx,n);
n--;
heapdown(n,xx);
}
else if (com==3)
{
printf("%d\n",a[1].val);
}
}
return 0;
}