Pagini recente » Cod sursa (job #2043266) | Cod sursa (job #1688647) | Cod sursa (job #1073976) | Cod sursa (job #1835907) | Cod sursa (job #892242)
Cod sursa(job #892242)
#include<cstdio>
#include<iostream>
using namespace std;
int pozbag[200005],n,k,m,op,nodins,nract,nract2;
struct arbore
{
int nr;
int nod;
} v[200005];
void insereaza(int k)
{
if(k/2>=1 && v[k/2].nod>v[k].nod)
{
swap(pozbag[v[k/2].nr],pozbag[v[k].nr]);
swap(v[k/2],v[k]);
insereaza(k/2);
}
}
void stergere(int k)
{
int min1,pozmin;
pozbag[v[n].nr]=pozbag[v[k].nr];
swap(v[n],v[k]);n--;
while(2*k<=n)
{
min1=v[2*k].nod;
pozmin=2*k;
if(2*k+1<=n && min1>v[2*k+1].nod)
{
min1=v[2*k+1].nod;
pozmin=2*k+1;
}
swap(pozbag[v[pozmin].nr],pozbag[v[k].nr]);
swap(v[k],v[pozmin]);
k=pozmin;
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d",&nodins);
pozbag[++nract]=++n;
v[n].nod=nodins;
v[n].nr=nract;
insereaza(n);
}
if(op==2)
{
scanf("%d",&nract2);
stergere(pozbag[nract2]);
}
if(op==3)
printf("%d\n",v[1].nod);
}
return 0;
}