Cod sursa(job #1873624)

Utilizator ceciliamariciucCecilia Mariciuc ceciliamariciuc Data 9 februarie 2017 11:58:12
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#define nmax 200001

using namespace std;

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

int n,H[nmax],nr;
int ad[nmax],nrad;

void Comb(int i)
{int v=H[i],tata=i,fiu=2*i;
while(fiu<=nr)
  {if(fiu<nr)
      if(H[fiu]>H[fiu+1]) fiu++;
   if(v>H[fiu])
     {H[tata]=H[fiu];
      tata=fiu;
      fiu=2*fiu;
     }
    else fiu=nr+1;
  }
H[tata]=v;
}

void Extract(int x)
{int v=H[x];
H[x]=H[nr];
nr--;
Comb(x);
}

void Citire()
{int i,op,x,j;
fin>>n;
for(i=1;i<=n;i++)
   {fin>>op;
    if(op==1)
      {fin>>x; nr++; H[nr]=x;
       Comb(nr);
       nrad++; ad[nrad]=x;
      }
    if(op==2)
      {fin>>x;
       for(j=1;j<=nr;j++)
          if(ad[x]==H[j])
             {Extract(j);break;}
      }
    if(op==3)
       fout<<H[1]<<"\n";
   }
}

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