Cod sursa(job #3340452)

Utilizator Laura721Laura Kudor Laura721 Data 14 februarie 2026 13:20:20
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int nmax=100000;
int n,m,Max;
int a[nmax+5],aint[4*nmax];
void read(){
    fin>>n>>m;
    for(int i=1;i<=n;++i)
        fin>>a[i];
}
void update(int i,int left,int right,int a,int b){
    if(left==right){
        aint[i]=b;
        return;
    }
    int mid=(left+right)/2;
    if(a<=mid)
        update(2*i,left,mid,a,b);
    else
        update(2*i+1,mid+1,right,a,b);
    aint[i]=max(aint[2*i],aint[2*i+1]);
}
void build(){
    for(int i=1;i<=n;++i)
        update(1,1,n,i,a[i]);
}
void query(int i,int left,int right,int a,int b){
    if(a<=left && right<=b){
        Max=max(Max,aint[i]);
        return;
    }
    if(a>right || b<left)
        return;
    int mid=(left+right)/2;
    query(2*i,left,mid,a,b);
    query(2*i+1,mid+1,right,a,b);
}
void solve(){
    while(m--){
        int op,a,b;
        fin>>op>>a>>b;
        if(op==1)
            update(1,1,n,a,b);
        if(op==0){
            Max=0;
            query(1,1,n,a,b);
            fout<<Max<<"\n";
        }
    }
}
int main()
{
    read();
    build();
    solve();
    return 0;
}