Pagini recente » Cod sursa (job #1579147) | Cod sursa (job #44525) | Cod sursa (job #1168708) | Cod sursa (job #2521106) | Cod sursa (job #1260373)
#include <cstdio>
using namespace std;
const int N=200001;
int p[N];
int heap[N];
int v[N];
int nr,m;
void schimba(int x,int y)
{
int aux;
aux=heap[x];
heap[x]=heap[y];
heap[y]=aux;
p[heap[x]]=x;
p[heap[y]]=y;
}
void up(int poz)
{
if(poz/2>0 && v[heap[poz]]<v[heap[poz/2]])
{
schimba(poz,poz/2);
up(poz/2);
}
}
void down(int poz)
{
int bun=poz,fs=2*poz,fd=2*poz+1;
if(fs<=nr && v[heap[fs]]<v[heap[bun]])
bun=fs;
if(fd<=nr && v[heap[fd]]<v[heap[bun]])
bun=fd;
if(bun!=poz)
{
schimba(poz,bun);
down(bun);
}
}
void ad(int x)
{
nr++;
m++;
v[m]=x;
p[m]=nr;
heap[nr]=m;
up(nr);
}
void del(int x)
{
int poz=p[x];
heap[poz]=heap[nr];
nr--;
up(poz);
down(poz);
}
int main()
{
FILE *in,*out;
in=fopen("heapuri.in","r");
out=fopen("heapuri.out","w");
int cod,n,x,i;
fscanf(in,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&cod);
if(cod!=3)
{
fscanf(in,"%d",&x);
if(cod==1)
ad(x);
else
del(x);
}
else
fprintf(out,"%d\n",v[heap[1]]);
}
return 0;
}