Pagini recente » Cod sursa (job #2496780) | Cod sursa (job #1501417) | Cod sursa (job #538981) | Cod sursa (job #2099889) | Cod sursa (job #1785703)
#include <cstdio>
#define tz 200002
using namespace std;
FILE *in=fopen("heapuri.in","r"),*out=fopen("heapuri.out","w");
int index[tz],val[tz],hip[tz],len,it;
void add(int number)
{
int loc=len,aux;
while(loc>1&&val[hip[loc]]<val[hip[loc/2]])
{
aux=index[hip[loc]];
index[hip[loc]]=index[hip[loc/2]];
index[hip[loc/2]]=aux;
aux=hip[loc];
hip[loc]=hip[loc/2];
hip[loc/2]=aux;
loc/=2;
}
}
void rem(int ind)
{
int loc=index[ind];
while(loc*2+1<=len)
{
if(val[hip[loc*2]]<val[hip[loc*2+1]])loc*=2;
else loc=loc*2+1;
hip[loc/2]=hip[loc];
index[hip[loc]]=loc/2;
}
if(loc*2==len)
loc*=2,
hip[loc/2]=hip[loc],
index[hip[loc]]=loc/2;
hip[loc]=0;
}
int main()
{
int nr,data;
len=0,it=0,val[0]=1000000001;
for(fscanf (in,"%d",&nr);nr;--nr)
{
fscanf(in,"%d",&data);
if(data==3)
fprintf(out,"%d\n",val[hip[1]]);
else if(data==1)
{
++len,++it;
fscanf(in,"%d",&data);
val[it]=data;
index[it]=len;
hip[index[it]]=it;
add(data);
}
else if(data==2)
{
fscanf(in,"%d",&data);
rem(data);
len--;
}
}
return 0;
}