Pagini recente » Cod sursa (job #703407) | Cod sursa (job #1187434) | Cod sursa (job #15250) | Cod sursa (job #1490474) | Cod sursa (job #594828)
Cod sursa(job #594828)
#include<stdio.h>
struct heap {
int val,nr;
};
heap h[200001];
int nr,n;
void swap(heap &a, heap &b) {
heap c=a;
a=b;
b=c;
}
void hurc(int p) {
if(p!=1 && h[p].val<h[p>>1].val) {
swap(h[p],h[p>>1]);
hurc(p>>1);
}
}
void hcob(int p) {
if(2*p+1<=n && h[2*p+1].val<h[2*p].val && h[2*p+1].val<h[p].val) {
swap(h[2*p+1],h[p]);
hcob(2*p+1);
}
else if(2*p<=n && h[2*p].val<h[p].val) {
swap(h[2*p],h[p]);
hcob(2*p);
}
}
inline void hpush(int y,int nrr) {
h[++n].val=y; h[n].nr=nrr;
hurc(n);
}
void hel(int p) {
int i;
for(i=1;i<=n;++i) {
if(h[i].nr==p) {
swap(h[i],h[n--]);
hcob(i);
}
}
}
int main() {
int i,a,b,c=0;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&nr);
for(i=1;i<=nr;++i) {
scanf("%d",&a);
if(a==1) {
scanf("%d",&b);
hpush(b,++c);
}
if(a==2) {
scanf("%d",&b);
hel(b);
}
if(a==3)
printf("%d\n",h[1]);
}
return 0;
}