Cod sursa(job #249402)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 28 ianuarie 2009 13:02:01
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<stdio.h>
#include<string.h>
long h[10000],n,i,p,aa,a[10000],ha[10000],hp[10000],li,j,lli;
void CombHeap(long i,long n)
{long v=h[i],tata=i,fiu=2*i;
while(fiu<=n)
{if(fiu<n)
   if(h[fiu]>h[fiu+1])++fiu;
 if(v>h[fiu])
   {h[tata]=h[fiu];
    tata=fiu;
    fiu*=2;}
    else
     fiu=n+1;}
h[tata]=v;}
void CreareHeap(long n)
{
 long i;
 for(i=n/2;i;--i)
    CombHeap(i,n);
}
int main()
{
 freopen("heapuri.in","r",stdin);
 freopen("heapuri.out","w",stdout);
 scanf("%ld",&n);
 for(i=1;i<=n;++i)
    {scanf("%ld",&p);
     if(p<3)scanf("%ld",&aa);
     if(p==1){a[++lli]=li+1;ha[++li]=aa;hp[li]=lli;}
     if(p==2){for(j=a[aa];j<=li-1;++j){ha[j]=ha[j+1];hp[j]=hp[j+1];--a[hp[j]];}a[aa]=n;--li;}
     if(p==3){memset(h,0,sizeof(h));memcpy(h,ha,sizeof(ha));CreareHeap(li);printf("%ld\n",h[1]);}}
 return 0;
}