Cod sursa(job #2719358)

Utilizator victorzarzuZarzu Victor victorzarzu Data 9 martie 2021 19:43:07
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define oo 0x3f3f3f3f

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, val, arb[4 * 100000 + 50], pos, a, b, t, maxim;

void update(int st, int dr, int nod)
{
  if(st == dr)
    {
      arb[nod] = val;
      return;
    }

  int mid = (st + dr) >> 1;
  if(pos <= mid)
    update(st, mid, 2 * nod);
  else
    update(mid + 1, dr, 2 * nod + 1);
  arb[nod] = max(arb[2 * nod], arb[2 * nod + 1]);
}

void query(int st, int dr, int nod)
{
  if(a <= st && dr <= b)
  {
    maxim = max(maxim, arb[nod]);
    return;
  }
  int mid = (st + dr) >> 1;
  if(a <= mid)
    query(st, mid, 2 * nod);
  if(mid < b)
    query(mid + 1, dr, 2 * nod + 1);
}

void Read()
{
  f>>n>>m;
  for(int i = 1;i <= n;++i)
    f>>val, pos = i, update(1, n, 1); 
}

void Solve()
{
  for(int i = 1;i <= m;++i)
    {
      maxim = -1;
      f>>t>>a>>b;
      if(!t)
        query(1, n, 1), g<<maxim<<'\n';
      else
        val = b, pos = a, update(1, n, 1);
    }
}

int main()
{
  Read();
  Solve();
  return 0;
}