Cod sursa(job #2953635)

Utilizator andystarzSuna Andrei andystarz Data 11 decembrie 2022 20:52:50
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
using namespace std;
int aint[400005];
int join(int a, int b)
{
    return max(a,b);
}
void change(int val, int poz, int l, int r, int cr)
{
    if (l==r)
    {
        aint[cr]=val;
        return;
    }
    int mid=(l+r)/2;
    if (mid>=poz)
        change(val, poz, l, mid, 2*cr);
    if (mid<poz)
        change(val, poz, mid+1, r, 2*cr+1);
    aint[cr]=join(aint[2*cr], aint[2*cr+1]);
    return;
}
int query (int ql, int qr, int l, int r, int cr)
{
    ///cout<<l<<" "<<r<<'\n';
    if (ql==l&&qr==r)
        return aint[cr];
    int mid=(l+r)/2;
    if (mid<ql)
    return query(ql, qr, mid+1, r, 2*cr+1);
    if (mid>=qr)
    return query(ql, qr, l, mid, 2*cr);
     return join(query(ql, mid, l, mid, 2*cr), query(mid+1, qr, mid+1, r, 2*cr+1));
}
int main()
{
    ifstream cin ("arbint.in");
    ofstream cout ("arbint.out");
  int n, m, cer, x, y;
  cin>>n>>m;
  int a;
  for (int i=1; i<=n; i++)
  {
      cin>>a;
      change (a, i, 1, n, 1);
  }
  for (int i=1; i<=m; i++)
  {
      cin>>cer>>x>>y;
      if (cer==0)
      {
          cout<<query(x, y, 1, n, 1)<<'\n';
      }
      else if (cer==1)
      {
          change(y, x, 1, n, 1);
      }
  }
}