Cod sursa(job #2201329)

Utilizator lucametehauDart Monkey lucametehau Data 4 mai 2018 11:56:01
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;

ifstream cin ("arbint.in");
ofstream cout ("arbint.out");

const int nmax = 1e5;

int n, m, x;
int tip, a, b;

int arbint[1 + 4 * nmax];

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

int query(int nod, int st, int dr, int l, int r) {
  if(l <= st && dr <= r)
    return arbint[nod];
  int mid = (st + dr) / 2, nod_st = 0, nod_dr = 0;
  if(l <= mid)
    nod_st = query(2 * nod, st, mid, l, r);
  if(mid < r)
    nod_dr = query(2 * nod + 1, mid + 1, dr, l, r);
  return max(nod_st, nod_dr);
}

int main() {
  cin >> n >> m;
  for(int i = 1; i <= n; i++) {
    cin >> x;
    update(1, 1, n, i, x);
  }
  for(int i = 1; i <= m; i++) {
    cin >> tip >> a >> b;
    if(tip == 0)
      cout << query(1, 1, n, a, b) << "\n";
    else
      update(1, 1, n, a, b);
  }
  return 0;
}