Cod sursa(job #3292348)

Utilizator TheAndreiEnache Andrei Alexandru TheAndrei Data 7 aprilie 2025 23:38:21
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

int n, n2, aint[131072*2], m, c, x, y;

void update(int i, int val){
    i+=n2;
    aint[i]=x;
    i/=2;
    while(i){
        aint[i]=max(aint[i*2], aint[2*i+1]);
        i>>=1;
    }
}

int query(int l, int r){
    l+=n2;
    r+=n2;
    int maxim=0;
    while(l<=r){
        if(l&1){
            maxim=std::max(maxim, aint[l]);
            l++;
        }
        l>>=1;

        if(!(r&1)){
            maxim=std::max(maxim, aint[r]);
            r--;
        }
        r>>=1;
    }
    return maxim;
}


int main(){
    fin>>n>>m;
    n2=1;
    while(n2<n)n2*=2;

    for(int i=0;i<n;i++)
        fin>>aint[n2+i];

    for(int i=n2-1;i;i--)
        aint[i]=max(aint[i*2], aint[i*2+1]);

    for(int i=0;i<m;i++){
        fin>>c>>x>>y;
        --x;
        if(!c)fout<<query(x, y-1)<<"\n";
        else update(x, y);
    }

    return 0;
}