Cod sursa(job #3332951)

Utilizator IleaIlea Bogdan Ilea Data 10 ianuarie 2026 09:20:38
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include<iostream>
#include<cstdint>
using namespace std;

#define NMAX 100001
#define INF int32_t(1e9+7)

int32_t n,q,aint[4*NMAX];
void init(int32_t nod,int32_t st,int32_t dr){
    if(st==dr){
        cin>>aint[nod];
        return;
    }
    int32_t mij=(st+dr)/2;
    init(2*nod,st,mij);
    init(2*nod+1,mij+1,dr);
    aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
void update(int32_t nod,int32_t st,int32_t dr,int32_t x,int32_t y){
    if(x<st||dr<x)return;
    if(st==dr&&dr==x){
        aint[nod]=y;
        return;
    }
    int32_t mij=(st+dr)/2;
    if(x<=mij)update(2*nod,st,mij,x,y);
    else update(2*nod+1,mij+1,dr,x,y);
    aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
int query(int nod,int st,int dr,int x,int y){
    if(dr<x||y<st)return 0;
    if(x<=st&&dr<=y){
        return aint[nod];
    }
    int32_t mij=(st+dr)/2;
    return max(query(2*nod,st,mij,x,y),query(2*nod+1,mij+1,dr,x,y));
}
int32_t main(){
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    cin>>n>>q;
    init(1,1,n);
    for(;q;--q){
        int32_t op,x,y;
        cin>>op>>x>>y;
        if(op){
            update(1,1,n,x,y);
        }else{
            cout<<query(1,1,n,x,y)<<"\n";
        }
    }
    return EXIT_SUCCESS;
}