Cod sursa(job #239813)

Utilizator me_andyAvramescu Andrei me_andy Data 5 ianuarie 2009 22:16:45
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream.h>

#define max 200001

 ifstream f("heapuri.in");
 ofstream g("heapuri.out");
 long i,n,a[max];

void down(int k)
{
 long t=2*k,aux;
 while(t<=n)
 {
  if(t<n && a[t+1]>a[t]) t++;
  if(a[k]>a[t])
  {
   aux=a[t];
   a[t]=a[k];
   a[k]=aux;
   k=t;
   t=2*k;
  }
  else break;
 }
}


void up(int k)
{
 long aux;
 while(k>1)
 {
  if(a[k]<a[k/2])
  {
   aux=a[k/2];
   a[k/2]=a[k];
   a[k]=aux;
   k=k/2;
  }
  else break;
 }
}
int main()
{
long v[max],lx,x,y,l,p;
 f>>l;
 n=0,lx=0;
 for(i=1;i<=l;i++)
 { f>>x;
   switch(x)
   {
    case 3:g<<a[1]<<"\n";break;
    case 1:{f>>y,  a[++n]=y,v[++lx]=y,up(n);break;}
    case 2:{f>>y,p=0;
	    while(a[p]!=v[y])p++;
	    a[p]=a[n],n--,down(p);}
   }
  }

 f.close();
 g.close();
 return 0;
}