Cod sursa(job #2811026)

Utilizator victorzarzuZarzu Victor victorzarzu Data 30 noiembrie 2021 21:48:03
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
int arb[4 * 100000 + 5];

void update(int node, int left, int right, int position, int value)
{
  if(left > right || position > right || left > position)
    return;
  
  if(left == right)
    {
      arb[node] = value;
      return;
    }
  
  int mid = (left + right) >> 1;
  update(2 * node, left, mid, position, value);
  update(2 * node + 1, mid + 1, right, position, value);

  arb[node] = max(arb[2 * node], arb[2 * node + 1]);
}

int query(int node, int left, int right, int a, int b)
{
  if(left > right || right < a || left > b)
    return 0;
  
  if(a <= left && right <= b)
    return arb[node];
  
  int mid = (left + right) >> 1;
  return max(query(2 * node, left, mid, a, b), query(2 * node + 1, mid + 1, right, a, b));
}

void read()
{
  f>>n>>m;
  int x, y, z;
  for(int i = 1;i <= n;++i)
    f>>x, update(1, 1, n, i, x);

  for(int i = 1;i <= m;++i)
  {
    f>>x>>y>>z;
    if(!x)
      g<<query(1, 1, n, y, z)<<'\n';
    else
      update(1, 1, n, y, z);
  }
}

int main()
{
  read();
  return 0;
}