Cod sursa(job #3237529)

Utilizator tsg38Tsg Tsg tsg38 Data 9 iulie 2024 20:01:47
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin( "arbint.in" );
ofstream fout( "arbint.out" );

const int DIM = 1e5 + 1;

int aint[4 * DIM];

void update( int node, int l, int r, int pos, int val ) {
  if ( l == r ) {
	aint[node] = val;
	return;
  }
  int mid = (l + r) / 2;
  if ( pos <= mid ) {
	update(2 * node, l, mid, pos, val);
  } else {
	update(2 * node + 1, mid + 1, r, pos, val);
  }
  aint[node] = max(aint[2 * node], aint[2 * node + 1]);
}
int query( int node, int l, int r, int x, int y ) {
  if ( x <= l && r <= y ) {
	return aint[node];
  }
  int mid = (l + r) / 2, res = 0;
  if ( x <= mid ) res = max(res, query(2 * node, l, mid, x, y));
  if ( y > mid ) res = max(res, query(2 * node + 1, mid + 1, r, x, y));
  return res;
}  

int main() {
  ios_base::sync_with_stdio(0);
  fin.tie(0);
  int n, q, val, tp, l, r;

  fin >> n >> q; 
  for ( int i = 1; i <= n; ++i ) {
	fin >> val;
	update(1, 1, n, i, val);
  }
  while ( q-- ) {
	fin >> tp >> l >> r;
	if ( tp == 0 ) {
	  fout << query(1, 1, n, l, r) << "\n";
	} else {
	  update(1, 1, n, l, r);
	}
  }
  fin.close();
  fout.close();
  return 0;
}