Cod sursa(job #403233)

Utilizator PopaStefanPopa Stefan PopaStefan Data 24 februarie 2010 18:53:09
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<fstream>
#define nmax 200001

using namespace std;

ifstream fin("heapuri.in");
ofstream fout("heapuri.out");

int heap[nmax],n;
int crono[nmax];
int aux[nmax],p;

void insert_heap(int x)
{int fiu=++n; //fiu este nodul n+1 si incrementez n totodata
int tata=n/2;
while(heap[tata]>x)
    //valoarea lui x trebuie promovata
   {heap[fiu]=heap[tata];
   crono[fiu]=crono[tata];
   fiu=tata;
   tata=fiu/2;
   }
heap[fiu]=x;
crono[fiu]=n;
}

int main()
{int i,j,m,x,operatie,v;
fin>>m;
for(i=1;i<=m;i++)
  {fin>>operatie;
  switch(operatie)
     {case 1 : fin>>x;
               insert_heap(x);
               break;
      case 2 : fin>>x;
               v=n;
               n=0;
               p=0;
               for(j=1;j<=v;j++)
                  if(crono[j]!=x)
                    {p++;
                    aux[p]=heap[j];
                    }
               for(j=1;j<=p;j++)
                 insert_heap(aux[j]);
               break;
      case 3 : fout<<heap[1]<<'\n';
     }
  }

fin.close();
fout.close();
return 0;
}