Pagini recente » Cod sursa (job #655611) | Cod sursa (job #1184634) | Cod sursa (job #2378855) | Cod sursa (job #876417) | Cod sursa (job #357960)
Cod sursa(job #357960)
#include <stdio.h>
int M;
int heap[200024],N,aux;
void insereaza(int x)
{
heap[++N]=x;
int nod,aux;
for(nod=N;nod>1;nod/=2)
if(heap[nod]<heap[nod/2])
{
aux=heap[nod];
heap[nod]=heap[nod/2];
heap[nod/2]=aux;
}
}
void stergere(int nod)
{
heap[nod]=heap[N];
--N;
if(heap[nod]<heap[nod/2] && nod!=1)
for(nod=N;nod>1;nod/=2)
if(heap[nod]<heap[nod/2])
{
aux=heap[nod];
heap[nod]=heap[nod/2];
heap[nod/2]=aux;
}
else
for (;nod*2<=N;)
{
int val=heap[2*nod],imin=2*nod;
if(nod*2+1<=N && heap[2*nod+1]<heap[2*nod])
val=heap[2*nod+1], imin=2*nod+1;
if (heap[nod]<=heap[imin])
return ;
int aux=heap[nod];
heap[nod]=heap[imin];
heap[imin]=aux;
nod=imin;
}
}
int main()
{
int i,tip,x,nod;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&M);
for(i=1;i<=M;++i)
{
scanf("%d",&tip);
if (tip==1)
{
scanf("%d",&x);
insereaza(x);
}
else
if(tip==2)
{
scanf("%d",&nod);
stergere(nod);
}
else
if(tip==3)
printf("%d\n",heap[1]);
}
return 0;
}