Pagini recente » Cod sursa (job #27437) | Cod sursa (job #2543417) | Cod sursa (job #1977535) | Cod sursa (job #1487785) | Cod sursa (job #516682)
Cod sursa(job #516682)
#include<stdio.h>
void percolate(long h[200001],long n,long k)
{long key=h[k];
while(k>1&&key<h[k/2])
{h[k]=h[k/2];
k/=2;}
h[k]=key;}
void sift(long h[200001],long n,long k)
{long son,aux;
do
{son=0;
if(2*k<=n)
{son=2*k;
if(2*k+1<=n&&h[2*k+1]>h[2*k])
son=2*k+1;
if(h[son]>=h[k])
son=0;}
if(son)
{aux=h[k];
h[k]=h[son];
h[son]=aux;
k=son;}}
while(son);}
void add(long h[200001],long *n,long k)
{h[++(*n)]=k;
percolate(h,(*n),(*n));}
void del(long h[200001],long *n,long k)
{h[k]=h[(*n)];
--(*n);
if(k>1&&h[k]<h[k/2])
percolate(h,(*n),k);
else
sift(h,(*n),k);}
void print(long h[200001],long n)
{long i;
for(i=1;i<=n;i++)
printf("%ld ",h[i]);
printf("\n");}
int main()
{int t;
long h[200001],n,k=0,i,p,j=0,v[200001],l;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
{scanf("%d",&t);
if(t==3)
printf("%ld\n",h[1]);
else
{scanf("%ld",&p);
if(t==1)
{v[++j]=p;
add(h,&k,p);
print(h,k);}
else
{for(l=1;l<=k;l++)
if(v[p]==h[l])
del(h,&k,l);
print(h,k);}}}
fclose(stdin);
fclose(stdout);
return 0;}