Pagini recente » Cod sursa (job #1284383) | Cod sursa (job #1223039) | Cod sursa (job #1353994) | Cod sursa (job #916824) | Cod sursa (job #758581)
Cod sursa(job #758581)
#include<stdio.h>
#include<cstring>
using namespace std;
int v[200005],poz[200005],el,elr;
void swap(int a,int b)
{
int aux;
aux=v[a];
v[a]=v[b];
v[b]=aux;
aux=poz[a];
poz[a]=poz[b];
poz[b]=aux;
}
void Act(int loc)
{
while(v[loc/2]>v[loc] && loc/2>0)
{
swap(loc/2,loc);
loc=loc>>2;
}
}
void add(int val)
{
el++;
elr++;
v[el]=val;
poz[el]=elr;
Act(el);
}
void down(int loc)
{
int s=loc*2,d=loc*2+1,fk=loc;
if(s<=el && v[s]<v[fk])
fk=s;
if(d<=el && v[d]<v[fk])
fk=d;
if(fk!=loc)
{
swap(fk,loc);
down(fk);
}
}
void del(int val)
{
int i;
for(i=1;i<=el;i++)
if(poz[i]==val)
break;
v[i]=v[el];
poz[i]=poz[el];
el--;
Act(i);
down(i);
}
int main ( )
{
int n,x,y;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d\n",&n);
char buff[10];
for(int i=1;i<=n;i++)
{
fgets(buff,10,stdin);
x=buff[0]-'0';
y=0;
int len=strlen(buff);
if(x==1)
{
for(int i=2;i<len;i++)
if(buff[i]>='0' && buff[i]<='9')
y=y*10+(buff[i]-'0');
else break;
add(y);
}
else if(x==2)
{
for(int i=2;i<len;i++)
if(buff[i]>='0' && buff[i]<='9')
y=y*10+(buff[i]-'0');
else break;
del(y);
}
else
printf("%d\n",v[1]);
}
}