Cod sursa(job #3215765)

Utilizator AlexandruBenescuAlexandru Benescu AlexandruBenescu Data 15 martie 2024 12:37:15
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
#define L 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

int n, q;
int aint[4 * L], mx;

void update(int node, int le, int ri, int pos, int val) {
  if (le == ri) {
    aint[node] = val;
    return;
  }
  int mid = (le + ri) / 2;
  if (pos <= mid)
    update(2 * node, le, mid, pos, val);
  else
    update(2 * node + 1, mid + 1, ri, pos, val);
  aint[node] = max(aint[2 * node], aint[2 * node + 1]);
}

void query(int node, int le, int ri, int x, int y) {
  if (x <= le && ri <= y) {
    mx = max(mx, aint[node]);
    return;
  }
  int mid = (le + ri) / 2;
  if (x <= mid)
    query(2 * node, le, mid, x, y);
  if (mid < y)
    query(2 * node + 1, mid + 1, ri, x, y);
}

int main() {
  fin >> n >> q;
  for (int i = 1; i <= n; i++) {
    int x;
    fin >> x;
    update(1, 1, n, i, x);
  }
  for (int i = 1; i <= q; i++) {
    int t, a, b;
    fin >> t >> a >> b;
    if (t == 0) {
      mx = 0;
      query(1, 1, n, a, b);
      fout << mx << "\n";
    }
    else
      update(1, 1, n, a, b);
  }
  return 0;
}