Cod sursa(job #2146208)

Utilizator VarticeanNicolae Varticean Varticean Data 27 februarie 2018 21:06:47
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int a[300005],n,m, val, left1, right1;
void update( int nod, int st, int dr, int pos )
{
     if( st == dr )
     {
          a[nod] = val;
          return;
     }
     int mid = ( st + dr ) /2;

     if( pos <= mid ) update( nod*2,st,mid,pos); else
          update( nod*2+1, mid+1, dr, pos);
     a[nod] = max( a[2*nod], a[2*nod+1]);

}
void qwery( int nod, int st, int dr)
{
     if( st >= left1 && dr <= right1 )
     {
          val = max( val,a[nod]);
          return;
     }
     int mid = ( st + dr )/2;
     if( left1 <= mid ) qwery(nod*2,st,mid);
     if( right1 > mid ) qwery( nod*2+1, mid+1,dr);
}
int main()
{
     in >> n >> m;
     int x;
     for(int i=1; i<=n; i++)
     {
          in >> x;
          val = x;
          update(1,1,n,i);
     }
     int qw,y;
     for(int i=1; i<=m; i++)
     {
          in >> qw;
          if( qw == 1 )
          {
               in >> x >> y;
               val = y;
               update( 1,1,n,x);
          }
          else
               {
                   in >> x >> y;
                   val = -1;
                   left1 = x;
                   right1 = y;
                   qwery( 1,1,n);
                   out << val << '\n';
               }
     }

    return 0;
}