Pagini recente » Cod sursa (job #3142477) | Cod sursa (job #2814776) | Cod sursa (job #2755662) | Cod sursa (job #1600480) | Cod sursa (job #1042211)
#include <cstdio>
//heap=arbore binar cu prop ca inf corespunzatoare fiecarui nod este mai buna decat inf fiilor
using namespace std;
int nh,n,h[200002],v[200002],poz[200002],nr;
void schimba(int p1,int p2)
{
int aux=h[p1];
h[p1]=h[p2];
h[p2]=aux;
poz[h[p1]]=p1;
poz[h[p2]]=p2;
}
void urca(int p)
{
while(p>1 && v[h[p]]<v[h[p/2]])
{
schimba(p,p/2);
p=p/2;
}
}
/*
void adauga (int val)
{
h[++nh]=val;
urca(nh);
}
*/
void coboara(int p)
{
int fs=2*p,fd=2*p+1,bun=p;
if (fs<=nh && v[h[fs]]<v[h[bun]]) bun=fs;
if (fd<=nh && v[h[fd]]<v[h[bun]]) bun=fd;
if (bun!=p)
{
schimba(bun,p);
coboara(bun);
}
}
void stergere(int p)
{
schimba(p,nh--);
urca(p);
coboara(p);
}
int main()
{
freopen("heapuri.in","r", stdin);
freopen("heapuri.out","w",stdout);
int i,j,k,tip;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&tip);
if (tip==1)
{
scanf("%d",&v[++nr]);
poz[nr]=++nh;
h[nh]=nr;
urca(nh);
}
if (tip==2)
{
scanf("%d",&k);
stergere(poz[k]);
}
if (tip==3) printf("%d\n",v[h[1]]);
}
return 0;
}