Cod sursa(job #2609207)

Utilizator evelina.nitoiuNitoiu Evelina evelina.nitoiu Data 2 mai 2020 12:28:36
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include<bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N=100005;
int aint[4*N];
int v[N];
void build(int node,int l,int r){
  if(l>r)
    return;
  if(l==r){
    aint[node]=v[l];
    return;
  }
  int mid=(l+r)/2;
  build(2*node,l,mid);
  build(2*node+1,mid+1,r);
  aint[node]=max(aint[2*node],aint[2*node+1]);
}
void update(int node,int l,int r,int poz,int val){
  if(l>r || poz>r || poz<l)
    return;
  if(l==r){
    aint[node]=val;
    return;
  }
  int mid=(l+r)/2;
  update(2*node,l,mid,poz,val);
  update(2*node+1,mid+1,r,poz,val);
  aint[node]=max(aint[2*node],aint[2*node+1]);
}
int query(int node,int l,int r,int ql,int qr){
  if(l>r || l>qr || r<ql)
    return -1;
  if(ql<=l && r<=qr)
    return aint[node];
  int mid=(l+r)/2;
  int maxi=query(2*node,l,mid,ql,qr);
  maxi=max(maxi,query(2*node+1,mid+1,r,ql,qr));
  return maxi;
}
int n,m,x,y,c;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    in>>n>>m;
    for(int i=1;i<=n;i++)
        in>>v[i];
    build(1,1,n);
    for(int i=1;i<=m;i++)
    {
        in>>c>>x>>y;
        if(c==0)
        {
            out<<query(1,1,n,x,y)<<"\n";
        }
        else
            update(1,1,n,x,y);
    }
    return 0;
}