Cod sursa(job #2899348)

Utilizator ClaudiuChelceaClaudiuChelcea ClaudiuChelcea Data 8 mai 2022 16:15:07
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>
#define NM (1 << 18)
#define md (l + r >> 1)
#define ls (n << 1)
#define rs (n << 1 | 1)
#define max(a, b) ((a) > (b) ? (a) : (b))
FILE *f, *g;

long rez, a, b;
long arb[NM];

void
query (int n, int l, int r)
{
  if (a <= l && r <= b)
    {
      rez = max (rez, arb[n]);
      return;
    }
  if (a <= md)
    query (ls, l, md);
  if (md + 1 <= b)
    query (rs, md + 1, r);
}

void
update (int n, int l, int r)
{
  if (l == r)
    arb[n] = b;
  else
    {
      if (a <= md)
        update (ls, l, md);
      else
        update (rs, md + 1, r);
      arb[n] = max (arb[ls], arb[rs]);
    }
}

int
main ()
{
  int x, i;
  long n, m;
  freopen ("arbint.in", "rt", stdin);
  freopen ("arbint.out", "wt", stdout);

  scanf ("%ld %ld\n", &n, &m);

  for (i = 1; i <= n; i++)
    {
      scanf ("%ld", &b);
      a = i;
      update (1, 1, n);
    }

  while (m--)
    {
      scanf ("%d %ld %ld\n", &x, &a, &b);
      if (x == 1)
        update (1, 1, n);
      else
        {
          rez = -1;
          query (1, 1, n);
          printf ("%ld\n", rez);
        }
    }

  return 0;
}