Cod sursa(job #3372381)

Utilizator RegeleOu3433Calin V. Dragos Andrei RegeleOu3433 Data 3 noiembrie 2026 14:05:09
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5 , INF = 1e9 + 1;
int aint[4 * MAXN];
void update ( int nod , int st , int dr , int poz , int val ) {
    if ( st == dr ) {
        aint[nod] = val;
        return;
    }
    int mij = ( st + dr ) / 2;
    if ( poz <= mij )
        update ( 2 * nod , st , mij , poz , val );
    if ( poz > mij )
        update ( 2 * nod + 1 , mij + 1 , dr , poz , val );
    aint[nod] = max ( aint[2 * nod] , aint[2 * nod + 1] );
}
int query ( int nod , int st , int dr , int stq , int drq ) {
    if ( stq <= st && dr <= drq )
        return aint[nod];
    int mij = ( st + dr ) / 2 , ans = -INF;
    if ( stq <= mij )
        ans = max ( ans , query ( 2 * nod , st , mij , stq , drq ) );
    if ( drq > mij )
        ans = max ( ans , query ( 2 * nod + 1 , mij + 1 , dr , stq , drq ) );
    return ans;
}
int main( ) {
    ifstream fin ( "arbint.in" );
    ofstream fout ( "arbint.out" );
    int n , m , i , a , op , b , c;

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