Cod sursa(job #3343915)

Utilizator IleaIlea Bogdan Ilea Data 28 februarie 2026 18:24:39
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include<iostream>
using namespace std;

#define NMAX 100001

int n,aint[NMAX];
void init(int nod,int st,int dr){
    if(st==dr){
        cin>>aint[nod];
        return;
    }
    int 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]);
}
signed rez=0xffffffff;
void query(int nod,int st,int dr,int x,int y){
    if(y<st||dr<x)return;
    if(x<=st&&dr<=y){
        rez=max(rez,aint[nod]);
        return;
    }
    int mij=(st+dr)/2;
    query(2*nod,st,mij,x,y);
    query(2*nod+1,mij+1,dr,x,y);
}
void update(int nod,int st,int dr,int x,int y){
    if(st==dr){
        if(st==x)aint[nod]=y;
        return;
    }
    int 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]);
}
signed main(){
#ifndef LOCAL
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
#endif // LOCAL
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int q;
    cin>>n>>q;
    init(1,1,n);
    for(;q;--q){
        int op;
        cin>>op;
        if(op){
            //update
            int x,y;
            cin>>x>>y;
            update(1,1,n,x,y);
        }else{
            rez=0xffffffff;
            int x,y;
            cin>>x>>y;
            query(1,1,n,x,y);
            cout<<rez<<"\n";
        }
    }
    return 0;
}