Cod sursa(job #2869713)

Utilizator vladp1324Vlad Pasare vladp1324 Data 11 martie 2022 19:41:07
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;

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

int n, m, a, p, aib[400001], l, r, op;

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

int query (int poz, int st, int dr) {
  if (l > dr or r < st)
    return 0;
  if (l <= st and dr <= r)
    return aib[poz];
  int mij = (st + dr) / 2;
  return max (query (poz * 2, st, mij), query (poz * 2 + 1, mij + 1, dr));
}

int main()
{
  fin >> n >> m;
  for (int i = 1; i <= n; i++) {
    fin >> a; p = i;
    update (1, 1, n);
  }
  for (int i = 1; i <= m; i++) {
    fin >> op;
    if (op == 0) {
      fin >> l >> r;
      fout << query (1, 1, n) << '\n';
    }
    else {
      fin >> p >> a;
      update (1, 1, n);
    }
  }
  return 0;
}