Cod sursa(job #2167782)

Utilizator VarticeanNicolae Varticean Varticean Data 13 martie 2018 23:33:38
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int a[400005],n,m,val,lef,rig;

void update( int nod, int st, int dr, int poz )
{
     if( st == dr )
     {
          a[nod] = val;
          return;
     }
     int mid = ( st + dr ) /2;
     if( poz <= mid ) update( 2*nod, st, mid, poz);
     else update( 2*nod+1, mid+1,dr,poz );
     a[nod] = max( a[2*nod], a[2*nod+1]);
}

void qwery( int nod, int st, int dr )
{
     if( lef <= st && rig >= dr )
     {
          val = max( val, a[nod]);
          return;
     }
     int mid = ( st+dr ) /2;
     if( lef <= mid ) qwery( 2*nod, st, mid);
     if( rig > mid ) qwery( 2*nod+1, mid+1, dr);
}

int main()
{
     ios::sync_with_stdio(0);
     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;
               lef = x; rig=y;
               val = -1;
               qwery(1,1,n);
               out << val << '\n';
          }
     }




    return 0;
}