Cod sursa(job #2897066)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 2 mai 2022 11:41:50
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

const int dim=1e5+9;

int n,m;
int v[dim],aint[4*dim];

void update(int nod,int tl,int tr,int poz,int val){
    if(tl==tr){
        aint[nod]=val;
        return;
    }
    int tm=(tl+tr)/2;
    if(poz<=tm){
        update(2*nod,tl,tm,poz,val);
    }else{
        update(2*nod+1,tm+1,tr,poz,val);
    }
    aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}

int query(int nod,int tl,int tr,int l,int r){
    if(tl==l&&tr==r){
        return aint[nod];
    }
    int tm=(tl+tr)/2;
    if(r<=tm)
        return query(2*nod,tl,tm,l,r);
    if(l>tm)
        return query(2*nod+1,tm+1,tr,l,r);
    return max(query(2*nod,tl,tm,l,tm),query(2*nod+1,tm+1,tr,tm+1,r));
}

signed main(){
        fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>v[i];
        update(1,1,n,i,v[i]);
    }
    while(m--){
        int op,l,r;
        fin>>op>>l>>r;
        if(op==1){
            update(1,1,n,l,r);
        }else{
            fout<<query(1,1,n,l,r)<<'\n';
        }
    }
}