Cod sursa(job #2098202)

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

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

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

    int m = (left + right ) / 2 ;
    if ( poz <= m ) update (nod*2 , left , m);
                       else update (nod *2+1, m +1 , right );
            v[nod] = max(v[2*nod],v[2*nod+1]);
}

void query(int nod , int left , int right )
{
    if ( start <= left && right <= finish)
    {
        maxim= max(maxim, v[nod]);
        return ;
    }

     int m = (left + right ) / 2 ;
        if ( start <= m ) query(2*nod, left, m);
        if(finish>m) query(2*nod+1 , m+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 c ;
               in >> c ;
                  if (!c)
                  {
                      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;
}