Pagini recente » Cod sursa (job #407863) | Cod sursa (job #3041914) | Cod sursa (job #893952) | Cod sursa (job #2044579) | Cod sursa (job #1755546)
#include <iostream>
using namespace std;
int a[200001],x,lnod=1,order=1,n,index[200001];
void swap(int i,int j){int temp=a[j];a[j]=a[i];a[i]=temp;}
void swapIndex(int i,int j){int temp=index[j];index[j]=index[i];index[i]=temp;}
void insert(int x){
int nod;
index[order++]=lnod;
if(lnod==1){
a[1]=x;lnod++;
}else{
nod=lnod;
a[nod]=x;
while(nod!=1){
if(a[nod/2]>a[nod]){
swap(nod/2,nod);
swapIndex(nod/2,nod);
nod=nod/2;
}else nod=1;
}
lnod++;
}
}
void deleteIndex(int x){
int nod;
for(int i=1;i<lnod;i++)
if(index[i]==x){nod=i;break;}
while(2*nod<lnod){
int nod2=a[2*nod]>a[2*nod+1]?2*nod+1:2*nod;
if(2*nod+1==lnod)nod2=2*nod;
swap(nod,nod2);
index[nod2]=nod;
nod=nod2;
}
lnod--;
}
int main() {
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
switch(x){
case 1:scanf("%d",&x);insert(x);break;
case 2:scanf("%d",&x);deleteIndex(x);break;
case 3:printf("%d\n",a[1]);
}
}
}