Pagini recente » Cod sursa (job #2370871) | Cod sursa (job #5274) | Cod sursa (job #387874) | Cod sursa (job #3155958) | Cod sursa (job #1597415)
#include <cstdio>
#include <algorithm>
using namespace std;
int n,i,cod,cnt,h[200001],ord[200001],poz[200001],k;
void up(int ind)
{
if(ind>1 && h[ind]<h[ind/2])
{
swap(h[ind],h[ind/2]);
swap(poz[h[ind]],poz[h[ind/2]]);
up(ind/2);
}
}
void down(int ind)
{
if(ind*2<n)
{
if(h[ind*2]<h[ind*2+1] && h[ind]>h[ind*2])
{
swap(h[ind],h[ind*2]);
swap(poz[h[ind]],poz[h[ind*2]]);
down(ind*2);
} else
if(h[ind*2]>=h[ind*2+1] && h[ind]>h[ind*2+1])
{
swap(h[ind],h[ind*2+1]);
swap(poz[h[ind]],poz[h[ind*2+1]]);
down(ind*2+1);
}
}else
if(ind*2==n && h[ind]>h[ind*2])
{
swap(h[ind],h[ind*2]);
swap(poz[h[ind]],poz[h[ind*2]]);
}
}
void adaugare(int x)
{
n++;
h[n]=x;
poz[x]=n;
up(n);
}
void stergere(int x)
{
int ind=poz[x];
swap(h[ind],h[n]);
swap(poz[h[ind]],poz[h[n]]);
n--;
up(ind);
down(ind);
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int x;
scanf("%d",&k);
for(i=1; i<=k; i++)
{
scanf("%d",&cod);
if(cod==1)
{
scanf("%d",&x);
cnt++;
ord[cnt]=x;
adaugare(x);
}
if(cod==2)
{
scanf("%d",&x);
stergere(ord[x]);
}
if(cod==3) printf("%d\n",h[1]);
}
}