Pagini recente » Cod sursa (job #1819381) | Cod sursa (job #460654) | Cod sursa (job #78919) | Cod sursa (job #613260) | Cod sursa (job #1429576)
#include <stdio.h>
int nh,poz[200002],h[200002],v[200002];
void schimba(int p,int q)
{
int aux;
aux=h[p];
h[p]=h[q];
h[q]=aux;
poz[h[p]] = p;
poz[h[q]] = q;
}
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(p,bun);
coboara(bun);
}
}
void urca(int p){
while(p>=1&&v[h[p]]<v[h[p/2]]){
schimba(p,p/2);
p/=2;
}
}
void adauga(int x){
h[++nh]=x;
poz[x]=nh;
urca(nh);
}
void sterge(int p){
schimba(p,nh--);
urca(p);
coboara(p);
}
int main(){
int i,n,p,tip,nr=0;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&tip);
if(tip==1){
scanf("%d",&v[++nr]);
adauga(nr);
}
if(tip==2){
scanf("%d",&p);
sterge(poz[p]);
}
if(tip==3){
printf("%d\n",v[h[1]]);
}
}
return 0;
}