Cod sursa(job #855740)

Utilizator zeeboBuzatu Vlad zeebo Data 15 ianuarie 2013 15:59:39
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;

ifstream f("heapuri.in");
ofstream g("heapuri.out");

int a[1001],n,i,P[1001],x,y,nr,j;

void HeapUp (int poz)
{
    if (poz==1) return;

    if (a[poz/2]>a[poz])
      {
          int aux=a[poz/2];
          a[poz/2]=a[poz];
          a[poz]=aux;
          aux=P[poz];
          P[poz]=P[poz/2];
          P[poz/2]=aux;
          HeapUp(poz/2);
      }

}

int PozMax (int x, int y)
{
    if (a[x]<a[y]) return x;
return y;
}

void HeapDown (int poz)
{
    int aux,pos;
    if (poz*2>=n) return;

pos=PozMax(2*poz,2*poz+1);
if (a[poz]>a[pos])
    {
        aux=a[poz];
        a[poz]=a[pos];
        a[pos]=aux;
        HeapDown(pos);
    }
}

int main ()
{
  f>>n;nr=0;
  for (i=1;i<=n;i++)
  {
      f>>x;
      if (x==1)
      {
          f>>a[++nr];
          P[nr]=nr;
          HeapUp(nr);
      }
      else
      if (x==2)
      {
          f>>y;
          for (j=1;j<=n;j++)
            if  (y==P[j]) break;
          a[j]=a[nr];
          nr--;
          HeapDown(j);
      }
      else
      if (x==3)
      {
          g<<a[1]<<'\n';
      }
  }
return 0;
}