Cod sursa(job #2080183)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 2 decembrie 2017 15:46:23
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
//arbint
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");

int arbore[5*100001] , n , op ;
int start, finish  , poz , value;
int maxim ;

void update( int nod , int left , int right )
{
    if( left == right ) {arbore[nod] = value ;
                         return ;
                        }

   int div= (left+right) / 2 ;
   if (poz <= div ) update( nod * 2, left, div );
   else update( nod *2+1, div+1, right);

   arbore[nod]= max(arbore[nod*2],arbore[nod*2+1]);


}

void query( int nod, int left, int right )
{
     //daca pot prelua informatia
     if(start<=left && right<=finish)
     {
         maxim= max(maxim,arbore[nod]);
         return ;
     }

    int div = (left + right)/ 2 ;

    if( start <=div  ) query(nod * 2 , left, div);
    if( div < finish ) query( nod * 2 + 1, div+1, right);

}





int main()
{    in >> n >> op ;
for ( int i =1 ; i <= n ; ++ i )
{  poz = i ;
in >> value ;
update(1,1,n);
}

for(int i =1 ; i <= op ; ++ i )
{
     int tip ;
     in >> tip ;
     if( tip == 0 )
     {
         maxim = -1 ;
         in >> start >> finish;
         query(1,1,n);
         out << maxim << "\n";
     }
    else
    {
        int aa , bb ;
        in >> aa >> bb ;
        poz=aa;
        value=bb;
        update(1,1,n);

    }

}



    return 0;
}