Pagini recente » Cod sursa (job #2944810) | Cod sursa (job #2567752) | Cod sursa (job #721287) | Cod sursa (job #1651850) | Cod sursa (job #235826)
Cod sursa(job #235826)
#include <cstdio>
const int NMAX=200002;
int H[NMAX],nr,N,a[NMAX],na,poz[NMAX];
void add(int x){
a[++na]=x;
H[++nr]=na;
int n=nr;
while (n>1 && x<a[H[n/2]]){
H[n]=H[n/2];
poz[H[n]]=n;
n/=2;}
H[n]=na;
poz[na]=n;
}
void del(int n){
int Son,aux;
H[n]=H[nr--];
poz[H[n]]=n;
if (2*n<=nr){
Son=2*n;
if (Son<nr && a[H[Son+1]]<a[H[Son]])
++Son;
if (a[H[n]]<a[H[Son]]) Son=0;}
else Son=0;
while (Son){
poz[H[Son]]=n;poz[H[n]]=Son;
aux=H[n];H[n]=H[Son];H[Son]=aux;
n=Son;
if (2*n<=nr){
Son=2*n;
if (Son<nr && a[H[Son+1]]<a[H[Son]])
++Son;
if (a[H[n]]<a[H[Son]]) Son=0;}
else Son=0;
}
}
int main(){
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&N);
int t,x;
while (N--){
scanf("%d",&t);
if (t!=3) scanf("%d",&x);
switch (t){
case 1: add(x);break;
case 2: del(poz[x]);break;
case 3: printf("%d\n",a[H[1]]);break;
};
}
return 0;
}