Pagini recente » Cod sursa (job #1794922) | Cod sursa (job #1709866) | Cod sursa (job #3195041) | Cod sursa (job #88744) | Cod sursa (job #280621)
Cod sursa(job #280621)
#include<stdio.h>
#define N 200100
int heap[N],nr[1000100],ord[N],hp;
void upheap(int y,int poz){
if(poz==1){
heap[poz]=y;
nr[y]=1;
return;
}
if(heap[poz>>1]<y){
heap[poz]=y;
nr[y]=poz;
return;
}
heap[poz]=heap[poz>>1];
nr[heap[poz]]=poz;
upheap(y,poz>>1);
}
void downheap(int x,int poz){
int a=x,p=poz;
if(a>heap[poz*2] && poz*2<=hp){
a=heap[poz*2];
p=poz<<1;
}
if(a>heap[poz*2+1] && poz*2+1<=hp){
a=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(y,++hp);
}
if(x==2){
scanf("%d",&y);
a=heap[hp--];
heap[nr[ord[y]]]=a;
downheap(a,nr[ord[y]]);
upheap(a,nr[a]);
nr[ord[y]]=0;
}
if(x==3)
printf("%d\n",heap[1]);
}
fclose(stdin);
fclose(stdout);
return 0;
}