Cod sursa(job #3125312)

Utilizator Cosmin.BoeriuCosmin Boeriu George Cosmin.Boeriu Data 2 mai 2023 17:28:55
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include<fstream>

using namespace std;

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

int arbore[400004];

void update(int nod, int st, int dr, int indice, int val){
    if(st == dr){
        arbore[nod] = val;
        return;
    }
    int mij = (st + dr)/2;
    if( indice <= mij ){
        update(2 * nod, st, mij, indice, val);
    }
    else{
        update(2 * nod + 1, mij + 1, dr, indice, val);
    }
    arbore[nod] = max( arbore[2 * nod], arbore[2 * nod + 1] );
    return;
}
int n;
int querry(int nod, int st, int dr, int l, int r){
    if( st >= l && dr <= r ){
        return arbore[nod];
    }
    int mij = ( st + dr ) / 2;
    int rez_st = -1, rez_dr = -1;
    if( l <= mij )
        rez_st = querry( nod * 2, st, mij, l, r );
    if( r > mij )
        rez_dr = querry( nod * 2 + 1, mij + 1, dr, l, r );
    return max( rez_st, rez_dr );
}

int main(){
    int m, i, j, op, a, b;

    fin>>n>>m;
    for( i = 1; i <= n; i++ ){
        fin>>a;
        update(1, 1, n, i, a);
    }
    for( i = 0; i < m; i++ ){
        fin>>op>>a>>b;
        if( op == 1 ){
            update( 1, 1, n, a, b );
        }
        else{
            fout<<querry( 1, 1, n, a, b )<<'\n';
        }
    }



}