Cod sursa(job #1894782)

Utilizator Garen456Paun Tudor Garen456 Data 27 februarie 2017 15:30:15
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>

using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int a[200005],n=0,b[200005],k;

void comb(int x)
{int t,f,v=a[x];
  t=x;
  f=t*2;
  while(f<=n)
  { if(f<n)
       if(a[f] > a[f+1]) f++;
      if(v>a[f])
      { a[t]=a[f];
          t=f;
          f=2*f;
      }
      else f=n+1;
  }
  a[t]=v;

}

void stergere( int x)
{ int i;
    for(i=1;i<=n;++i)
        if(a[i]==x) break;
    if(i!=n)
    {
    a[i]=a[n];
    n--;
    comb(i);
    }
    else n--;

}

void ins(int x)
{ a[++n]=x;
   int i=n/2,j=n;
   while(i>=1)
   {   if( a[i] > x )
              { a[j]=a[i];
                  j=i;
                  i=i/2;
              }
        else break;
   }
    a[j]=x;
}

int main()
{   int m,i,op,x;
    fin>>m;
    for(i=1;i<=m;++i)
    { fin>>op;
        if(op==1)
        { fin>>x;
          b[++k]=x;
            ins(x);
        }
        if(op==3)
             fout<<a[1]<<"\n";
        if(op==2)
        { fin>>x;
            stergere(b[x]);
        }

    }

    return 0;
}