Pagini recente » Cod sursa (job #67232) | Cod sursa (job #2777641) | Cod sursa (job #1446442) | r22009 | Cod sursa (job #1044083)
#include<cstdio>
using namespace std;
int a[200001],h[200001],poz[200001],lg,op,i,nr,x,aux,p;
void swap(int i,int j)
{
int aux;
aux=h[i];
h[i]=h[j];
h[j]=aux;
poz[h[j]]=j;
poz[h[i]]=i;
}
void heapup(int i)
{
int aux;
if(a[h[i]]<a[h[i/2]]&&i>1)
{
swap(i/2,i);
heapup(i/2);
}
}
void heapdown(int i,int lg)
{
if(2*i<=lg)
{
if(2*i+1<=lg)
{
if(a[h[i*2]]<a[h[i*2+1]]&&a[h[i*2]]<a[h[i]])
{
swap(2*i,i);
heapdown(2*i,lg);
}
else if(a[h[i*2+1]]<a[h[i*2]]&&a[h[i*2+1]]<a[h[i]])
{
swap(2*i+1,i);
heapdown(2*i+1,lg);
}
}
else if(a[h[i*2]]<a[h[i]])
{
swap(2*i,i);
heapdown(2*i,lg);
}
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d ",&p);
nr=0;
lg=0;
for(i=1;i<=p;i++)
{
scanf("%d",&op);
if(op==3)
{
printf("%d\n",a[h[1]]);
}
if(op==1)
{
scanf("%d",&x);
a[++nr]=x;
h[++lg]=nr;
poz[nr]=lg;
heapup(nr);
}
if(op==2)
{
scanf("%d",&x);
aux=poz[x];
swap(poz[x],lg);
lg--;
heapdown(aux,lg);
}
}
}