Cod sursa(job #1873630)

Utilizator passwordCiaciru Ana Maria password Data 9 februarie 2017 12:02:34
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
#define nmax 200001
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int H[nmax],n;


void comb(int i)
{int 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=fiu*2;
    }
  else
    fiu=n+1;
 }
 H[tata]=v;
}

void cer(int k)
{int key=H[k];
 while((k>1)&&(key<H[k/2]))
  {H[k]=H[k/2];
   k=k/2;}
  H[k]=key;
}

void elim(int k)
{H[k]=H[n]; --n;
 if((k>1)&&(H[k]<H[k/2])) cer(k);
 else comb(k);
}

void read()
{int i,cod,x,nr;
 f>>nr;
 for(i=1;i<=nr;i++)
    {f>>cod;
     if(cod==1)
       { f>>x;
         H[++n]=x;
         comb(n);
       }
     if(cod==2)
       {f>>x; g<<H[x]<<" ";
        elim(x);
       }
     if(cod==3)
       g<<H[1]<<"\n";
     /*for(int j=1;j<=n;j++)
        g<<H[j]<<" ";
     g<<"\n";
     */
    }
}

int main()
{read();
 return 0;
}