Cod sursa(job #1250740)

Utilizator nnnmmmcioltan alex nnnmmm Data 28 octombrie 2014 15:10:37
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<stdio.h>
int v[10000],nr,i,n,tip,elem;
void urca(int k)
{
 int aux;
 while(k>=1&&v[k/2]>v[k])
       {
        aux=v[k/2];
        v[k/2]=v[k];
        v[k]=aux;
        k/=2;
       }
}
void coboara(int k,int n)
{
 int aux, best;
 char s = 1;
 while(k*2<=n && s)
       {
           s = 0;
        best=k;
        if(v[best]>v[k*2])
           {
            best=k*2;
            s = 1;
           }
        if(v[best]>v[k*2+1])
           {
            best=k*2+1;
            s = 1;
           }
        aux=v[best];
        v[best]=v[k];
        v[k]=aux;
        k=best;
       }
}
int main()
{
 FILE *fin=fopen("heap.in","r");
 FILE *fout=fopen("heap.out","w");
 fscanf(fin,"%d",&n);
 for(i=1;i<=n;i++)
     {
      fscanf(fin,"%d",&tip);
      if(tip!=3)
         {
          fscanf(fin,"%d",&elem);
          if(tip==1)
             {
              nr++;
              v[nr]=elem;
              urca(nr);
             }
          else
             {
              v[1]=v[nr];
              nr--;
              coboara(1,nr);
             }
         }
      else
         {
          fprintf(fout,"%d\n",v[1]);
         }
     }
 fclose(fin);
 fclose(fout);
 return 0;
}