Pagini recente » Cod sursa (job #2413657) | Cod sursa (job #2352845) | Cod sursa (job #2197636) | Cod sursa (job #1705728) | Cod sursa (job #280708)
Cod sursa(job #280708)
#include<stdio.h>
#define N 200100
int heap[N],nr[N],ord[N],hp;
void upheap(int y,int poz){
if(poz==1){
heap[poz]=y;
nr[y]=1;
return;
}
if(ord[heap[poz>>1]]<ord[y]){
heap[poz]=y;
nr[ord[y]]=poz;
return;
}
heap[poz]=heap[poz>>1];
nr[heap[poz]]=poz;
upheap(y,poz>>1);
}
void downheap(int x,int poz){
int a=ord[x],p=poz;
if(a>ord[heap[poz*2]] && poz*2<=hp){
a=ord[heap[poz*2]];
p=poz<<1;
}
if(a>ord[heap[poz*2+1]] && poz*2+1<=hp){
a=ord[heap[poz*2+1]];
p=poz*2+1;
}
if(p!=poz){
heap[poz]=heap[p];
nr[heap[poz]]=poz;
}
else{
heap[poz]=x;
nr[heap[poz]]=poz;
return;
}
downheap(x,p);
}
int main(){
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int i,n,x,y,a;
scanf("%d",&n);
for(i=0;i<n;++i){
scanf("%d",&x);
if(x==1){
scanf("%d",&y);
ord[++ord[0]]=y;
upheap(ord[0],++hp);
}
if(x==2){
scanf("%d",&y);
a=heap[hp];
heap[hp--]=0;
heap[nr[y]]=a;
downheap(a,nr[y]);
upheap(a,nr[a]);
nr[y]=0;
}
if(x==3)
printf("%d\n",ord[heap[1]]);
}
fclose(stdin);
fclose(stdout);
return 0;
}