Pagini recente » Cod sursa (job #1940468) | Cod sursa (job #1374985) | Cod sursa (job #883530) | Cod sursa (job #837746) | Cod sursa (job #623747)
Cod sursa(job #623747)
#include <stdio.h>
#define nm 200000
int h[nm],poz[nm],n,m,k,op,i,x,a[nm];
void insertheap(int ind,int nr)
{ int fiu,tata,z;
fiu=ind;
tata=ind/2;
while(tata>0&&a[h[tata]]>a[h[fiu]])
{
z=h[tata];
h[tata]=h[fiu];
h[fiu]=z;
poz[h[tata]]=tata;
poz[h[fiu]]=fiu;
fiu=tata;
tata=fiu/2;
}
}
void sterge(int pozitie)
{ int tata,fiu,z;
a[pozitie]=-1;
z=poz[pozitie];
poz[pozitie]=0;
poz[h[m]]=z;
h[z]=h[m]; h[m]=0; m--;
tata=z; fiu=tata*2;
while(fiu<=m)
{
if(fiu+1<=m) if(a[h[fiu]]>a[h[fiu+1]])fiu++;
if(a[h[tata]]>a[h[fiu]])
{
z=h[tata]; h[tata]=h[fiu]; h[fiu]=z;
poz[h[tata]]=tata;
poz[h[fiu]]=fiu;
tata=fiu; fiu=fiu*2;
}
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d\n",&n);
k=0;
m=0;
// 1 = inserare
// 2 = stergere
// 3 = afisare minim
for(i=1;i<=n;i++)
{
scanf("%d",&op);
if(op==1||op==2)
{
scanf("%d",&x);
if(op==1)
{m++; k++;
h[m]=k; a[k]=x; poz[k]=m;
insertheap(m,x);
}
else sterge(x);
}
else printf("%d\n",a[h[1]]);
}
fclose(stdin);
fclose(stdout);
return 0;
}