Pagini recente » Cod sursa (job #2450023) | Cod sursa (job #3164027) | Cod sursa (job #2112510) | Cod sursa (job #526163) | Cod sursa (job #976118)
Cod sursa(job #976118)
#include<stdio.h>
#define maxn 200005
using namespace std;
int n,nh,nr;
int v[maxn];
int h[maxn],pos[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(v[h[k]]<v[h[i]])
{
swap(i,k);
heap_up(i);
}
}
void heap_dw(int k)
{
int i=2*k;
if(i<=nh)
{
if(i+1<=nh && v[h[i+1]]<v[h[i]]) i++;
if(v[h[i]]<v[h[k]])
{
swap(i,k);
heap_dw(i);
}
}
}
void add(int x)
{
v[++nr]=x;
h[++nh]=nr;
pos[nr]=nh;
heap_up(nh);
}
void del(int x)
{
int posk=pos[x];
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) add(x);
else del(x);
}
else printf("%d\n",v[h[1]]);
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
solve();
fclose(stdin);
fclose(stdout);
return 0;
}