Cod sursa(job #3288352)

Utilizator Victor_9Diaconescu Victor Victor_9 Data 21 martie 2025 18:10:15
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5 + 5;

int n, m, c, a, b, aint[4 * nmax], offset, v[nmax], ans;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

////////////////////////////////////////////////////////////////////////////////

void update(int poz, int val){
    
    aint[offset + poz] = val;
    
    for(int j=(offset + poz)/2;j>0;j/=2){
        aint[j] = max(aint[2*j] , aint[2*j+1]);
    }
    
    
}


int querry(int node, int l, int r, int gl, int gr){
    
    if(l > gr || r < gl) return 0;
    
    if(l <= gl && gr <= r) return aint[node];
    
    int mid = (gl + gr) / 2;
    
    int stanga = querry(2*node, l, r, gl, mid);
    int dreapta = querry(2*node+1, l, r, mid+1, gr);
    
    return max(stanga , dreapta);
}


////////////////////////////////////////////////////////////////////////////////


int main()
{
    //citire rapida
    ios_base::sync_with_stdio(0);
    fin.tie(0);
    fout.tie(0);
    
    fin>>n>>m;
    
    offset = 1;
    while(offset < n){
        offset *= 2;
    }
    
    for(int i=1;i<=n;i++){
        fin>>v[i];
        update(i-1, v[i]);
    }
    
    
    for(int i=1;i<=m;i++){
        fin>>c>>a>>b;
        
        if(c == 1){
            update(a-1, b);
        }else{
            ans = querry(1, a-1, b-1, 0, offset-1);
            fout<<ans<<"\n";
        }
        
    }

}