Pagini recente » Cod sursa (job #653342) | Cod sursa (job #2804717) | Cod sursa (job #398398) | Cod sursa (job #1216595) | Cod sursa (job #726499)
Cod sursa(job #726499)
#include<stdio.h>
using namespace std;
#define nmax 10001
int Heap[nmax],Val[nmax],Pos[nmax],u;
void percolate(int i)
{
int aux;
while(Val[Heap[i/2]] > Val[Heap[i]] && i/2)
{
aux=Heap[i/2];
Heap[i/2]=Heap[i];
Heap[i]=aux;
aux=Pos[Heap[i/2]];
Pos[Heap[i/2]]=Pos[Heap[i]];
Pos[Heap[i]]=aux;
i/=2;
}
}
void sit (int x)
{
int aux, y = 0;
while (x != y)
{
y = x;
if (y*2<=u && Val[Heap[x]]>Val[Heap[y*2]]) x = y*2;
if (y*2+1<=u && Val[Heap[x]]>Val[Heap[y*2+1]]) x = y*2+1;
aux = Heap[x];
Heap[x] = Heap[y];
Heap[y] = aux;
Pos[Heap[x]] = x;
Pos[Heap[y]] = y;
}
}
void insereaza(int a)
{
u++;
Heap[u]=u;
Val[u]=a;
Pos[u]=u;
percolate(u);
}
void sterge (int a)
{
Val[a]=-1;
percolate(Pos[a]);
Pos[a]=0;
Heap[1]=Heap[u--];
Pos[Heap[1]]=1;
sit(1);
}
void afisare ()
{
printf("%d \n",Val[Heap[1]]);
}
int main()
{
int i,a,nod,m;
freopen("heapuri.out","w",stdout);
freopen("heapuri.in","r",stdin);
scanf("%d",&m);
for(i=1;i<=m;++i)
{
scanf("%d",&a);
switch(a)
{
case 1:
{
scanf("%d",&nod);
insereaza(nod);
}break;
case 2:
{
scanf("%d",&nod);
sterge(nod);
}break;
case 3:
afisare();
break;
}
}
return 0;
}