Cod sursa(job #3366378)

Utilizator cKalbfleischcoraline Kalbfleisch cKalbfleisch Data 1 octombrie 2026 10:13:18
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;

bool INP=true;


int main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    if(INP){
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    }
    int N,Q;cin>>N>>Q;
    int zp=1<<(int)ceil(log2(N));
    vector<int> arb(2*zp,0);
    for(int i=0;i<N;i++){
        cin>>arb[i+zp];
    }
    for(int i=zp-1;i>0;i--){
        arb[i]=max(arb[i+i],arb[i+i+1]);
    }
    for(int i=0;i<Q;i++){
        int t,a,b;cin>>t>>a>>b;
        if(t==0){//maxintervalab
            int l=a+zp-1, r=b+zp-1;
            int res=0;
            while(l<=r){
                if(l%2==1){
                    res=max(res,arb[l]);
                    l++;
                }
                if(r%2==0){
                    res=max(res,arb[r]);
                    r--;
                }
                l/=2;
                r/=2;
            }
            cout<<res<<'\n';
        }
        else{
            arb[a+zp-1]=b;
            int n=(a+zp-1)/2;
            while(n>0){
                arb[n]=max(arb[n+n],arb[n+n+1]);
                n/=2;
            }
        }
    }
}