Pagini recente » Cod sursa (job #2257786) | Cod sursa (job #3004601) | Cod sursa (job #666132) | Cod sursa (job #2551703) | Cod sursa (job #1770304)
#include <stdio.h>
const int buff_size=4096;
char buff[buff_size];
int _i=buff_size;
int next_int(FILE * in)
{
char x,y,k=1;
int z=0;
if (_i==buff_size)
y=fread(buff,buff_size,1,in),_i=0;
x=1;
while ((x<48 || x> 57) && x!='-')
{
x=buff[_i];
_i++;
if (_i==buff_size)
{
y=fread(buff,buff_size,1,in);
_i=0;
}
}
while (x>=48 && x<=57 || x=='-')
{
if (x=='-')
k=-1; else
z=(z<<1)+(z<<3)+x-48;
x=buff[_i];
_i++;
if (_i==buff_size)
{
y=fread(buff,buff_size,1,in);
_i=0;
}
}
return z*k;
}
int heap[200009],pos[200009],a[200009],n,op,x,i,_n,k;
int update(int k)
{
int fiu=++_n;
heap[_n]=k;
pos[k]=_n;
while (fiu>>1>0)
{
if (a[heap[fiu]]<a[heap[fiu>>1]])
{
heap[fiu]=heap[fiu]^heap[fiu>>1];
heap[fiu>>1]=heap[fiu]^heap[fiu>>1];
heap[fiu]=heap[fiu]^heap[fiu>>1];
pos[k]=fiu>>1;
pos[heap[fiu]]=fiu;
}
fiu>>=1;
}
}
void _delete(int v)
{
int tata=v,fiu=v<<1;
heap[v]=heap[_n--];
pos[heap[_n+1]]=v;
while (fiu<=_n)
{
if (fiu+1<=_n)
{
if (a[heap[fiu]]<a[heap[fiu+1]])
{
if (a[heap[fiu]]<a[heap[tata]])
{
pos[heap[tata]]=fiu;
pos[heap[fiu]]=tata;
heap[tata]=heap[tata]^heap[fiu];
heap[fiu]=heap[tata]^heap[fiu];
heap[tata]=heap[tata]^heap[fiu];
}
} else
if (a[heap[fiu+1]]<a[heap[tata]])
{
pos[heap[tata]]=fiu+1;
pos[heap[fiu+1]]=tata;
heap[tata]=heap[tata]^heap[fiu+1];
heap[fiu+1]=heap[tata]^heap[fiu+1];
heap[tata]=heap[tata]^heap[fiu+1];
fiu=fiu+1;
}
} else
if (a[heap[fiu]]<a[heap[tata]])
{
pos[heap[tata]]=fiu;
pos[heap[fiu]]=tata;
heap[tata]=heap[tata]^heap[fiu];
heap[fiu]=heap[tata]^heap[fiu];
heap[tata]=heap[tata]^heap[fiu];
}
tata=fiu;
fiu<<=1;
}
}
int main(int argc, char const *argv[])
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
n=next_int(stdin);
for (i=0;i<n;++i)
{
op=next_int(stdin);
if (op==1)
{
x=next_int(stdin);
a[k++]=x;
update(k-1);
} else
if (op==2)
{
x=next_int(stdin);
_delete(pos[x-1]);
} else
if (op==3)
printf("%d\n",a[heap[1]]);
}
fclose(stdin);
fclose(stdout);
return 0;
}