Cod sursa(job #2402592)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 10 aprilie 2019 20:29:57
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <algorithm>
#define NMAX 100000

using namespace std;

int aint[4 * NMAX + 1];

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

int query( int a, int b, int st, int dr, int i ) {
  if( a == st && b == dr )
    return aint[i];
  else {
    int mid = ( st + dr ) / 2;
    if( b <= mid )
      query( a, b, st, mid, i * 2 );
    else if( a > mid )
      query( a, b, mid + 1, dr, i * 2 + 1 );
    else
      return max( query( a, mid, st, mid, i * 2 ), query( mid + 1, b, mid + 1, dr, i * 2 + 1) );
  }
}

int main() {
  ifstream fin("arbint.in");
  ofstream fout("arbint.out");
  int a, b, op, st, dr, i, x, n, m;
  fin>>n>>m;
  for( i = 1; i <= n; i ++ ) {
    fin>>x;
    update( i, x, 1, n, 1 );
  }
  for( i = 1; i <= m; i ++ ) {
    fin>>op>>a>>b;
    if( op == 1 )
      update( a, b, 1, n, 1 );
    else
      fout<<query( a, b, 1, n, 1 )<<"\n";
  }
}