Cod sursa(job #2939373)

Utilizator clara123Ghira Clara clara123 Data 13 noiembrie 2022 16:31:51
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int i,n,aa,b,t,x,v[100010],a[400010];

void build(int nod,int l,int r){
    if(l==r){
        a[nod]=v[l];
    }
     else{
        int mij=(l+r)/2;
        build(nod*2,l,mij);
        build(nod*2+1,mij+1,r);
        a[nod]=max(a[nod*2], a[nod*2+1]);
    }
}
void update(int nod,int l,int r,int poz,int ap){
    if(l==r){
        a[nod]=ap;
    }
     else{
        int mij=(l+r)/2;
        if(poz<=mij)
            update(nod*2,l,mij,poz,ap);
        else
            update(nod*2+1,mij+1,r,poz,ap);
        a[nod]=max(a[nod*2],a[nod*2+1]);
    }
}
int query(int nod,int l,int r,int ql,int qr){
    if(ql<=l && r<=qr){
        return a[nod];
}
    else{
        int mij=(l+r)/2;
        if(qr<=mij)
            return query(nod*2,l,mij,ql,qr);
        if(mij+1<=ql)
            return query(nod*2+1,mij+1,r,ql,qr);
        return max(query(nod*2,l,mij,ql,qr),
        query(nod*2+1,mij+1,r,ql,qr));
    }
}



int main(){
    fin>>n>>t;
    for(i=1;i<=n;i++)
        fin>>v[i];
    build(1,1,n);
    for(i=1;i<=t;i++){
        fin>>x>>aa>>b;
        if(x==0)
            fout<<query(1,1,n,aa,b)<<"\n";
        else
            update(1,1,n,aa,b);

    }

    return 0;
}