Cod sursa(job #2144892)

Utilizator VarticeanNicolae Varticean Varticean Data 26 februarie 2018 23:21:52
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int a[300005],n,m;
int pos,l,r,val;
void update( int nod, int st, int dr )
{
      if( st == dr )
      {
           a[nod] = val;
           return;
      }
      int mid = ( st + dr ) /2;
      if( pos <= mid ) update( nod*2,st,mid ); else update( nod*2 +1, mid+1,dr);
      a[nod] = max( a[nod*2], a[nod*2+1]);
}
void qwery( int nod, int st, int dr )
{
      if( st >= l && r >= dr )
      {
         val = max(val,a[nod]);
         return;
      }
      int mid = ( st + dr ) /2;
      if( l <= mid ) qwery(nod*2,st,mid);
      if( r > 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;
          pos = i;
          update(1,1,n);
     }
     int qw,y;
     for(int i=1; i<=m; i++)
     {
          in >> qw >> x >> y;
          if( qw == 1)
          {
             val = y;
             pos = x;
             update(1,1,n);
          } else
          {
               l = x;
               r = y;
               val = -1;
               qwery( 1,1,n);
               out << val << '\n';
          }
     }
    return 0;
}