Pagini recente » Cod sursa (job #2343019) | Cod sursa (job #363691) | Cod sursa (job #1448692) | Cod sursa (job #1859622) | Cod sursa (job #976099)
Cod sursa(job #976099)
#include<stdio.h>
#define maxn 200005
using namespace std;
int n,nh,nr;
int h[maxn],pos[maxn],node[maxn];
void swap(int i,int j)
{
int aux;
aux=h[i];
h[i]=h[j];
h[j]=aux;
pos[h[i]]=i;
pos[h[j]]=j;
}
void heap_up(int k)
{
if(k<=1) return;
int i=k/2;
if(h[k]<h[i])
{
swap(i,k);
heap_up(i);
}
}
void heap_dw(int k)
{
int i=2*k;
if(i<=nh)
{
if(i+1<=nh && h[i+1]<h[i]) i++;
if(h[i]<h[k])
{
swap(i,k);
heap_dw(i);
}
}
}
void add(int x)
{
h[++nh]=x;
pos[x]=nh;
node[nr]=x;
heap_up(nh);
}
void del(int x)
{
int k=node[x];
int posk=pos[k];
swap(posk,nh);
nh--;
if(posk<=nh) heap_dw(posk);
}
void solve()
{
int type,x;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&type);
if(type<3)
{
scanf("%d",&x);
if(type==1) nr++,add(x);
else del(x);
}
else printf("%d\n",h[1]);
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
solve();
fclose(stdin);
fclose(stdout);
return 0;
}