Cod sursa(job #2223862)

Utilizator BionicOnea Radu Bionic Data 21 iulie 2018 20:45:47
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>

using namespace std;


int heap[200000];
int cronologie[200000];
int n,op,r,heapmax=0,sizecronologie=0;
ifstream f("heapuri.in");
ofstream g("heapuri.out");


void stergere(int lower, int higher)
{
    int mid=(lower+higher)/2;

  if(r<heap[mid])
  {
  stergere(lower,mid-1);
  }


  else if(r>heap[mid])
  {
      stergere(mid+1,higher);
  }

  else for(int i=mid;i<heapmax;i++)
            heap[i]=heap[i+1];


}



void inserare(int lower,int higher)
{

    if(higher-lower==1)
        {

        for(int i=heapmax;i>=higher;i--)
            heap[i+1]=heap[i];
        heap[higher]=r;
        }



    else{
       int mid=(lower+higher)/2;


  if(r<heap[mid])
  {
  inserare(lower,mid);
  }


  else if(r>heap[mid])
  {
    inserare(mid,higher);
  }

}


}




int main()
{
 f>>n;
 while(n)
 {
 f>>op;

 if(op==1)
 {

     f>>r;
     cronologie[++sizecronologie]=r;

     if(heapmax==0)heap[1]=r;
     else if(heap[heapmax]<r)heap[heapmax+1]=r;
     else if(heap[1]>r){
         for(int i=heapmax;i>=1;i--)
            heap[i+1]=heap[i];
        heap[1]=r; }
     else inserare(1,heapmax);
     heapmax++;
 }


 else if(op==2)
 {
     f>>r;
     r=cronologie[r];
     stergere(1,heapmax);
     heapmax--;
}


 else if(op==3)
 {
     g<<heap[1]<<"\n";

 }






 n--;
 }









}