Cod sursa(job #3259196)

Utilizator not_anduAndu Scheusan not_andu Data 25 noiembrie 2024 15:27:48
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.87 kb
#include <bits/stdc++.h>

using namespace std;

#define INFILE "arbint.in"
#define OUTFILE "arbint.out"

const int N_MAX = 1e5;

int n, queries;
int aint[4 * N_MAX + 5];

void build(int node, int left, int right){
    if(left == right) cin >> aint[node];
    else {
        int middle = (left + right) >> 1;
        build(2 * node, left, middle);
        build(2 * node + 1, middle + 1, right);

        aint[node] = max(aint[2 * node], aint[2 * node + 1]);
    }
}

void update(int node, int left, int right, int position, int value){
    if(left == right) aint[node] = value;
    else {
        int middle = (left + right) >> 1;
        if(position <= middle) update(2 * node, left, middle, position, value);
        else update(2 * node + 1, middle + 1, right, position, value);

        aint[node] = max(aint[2 * node], aint[2 * node + 1]);

    }
}

int query(int node, int left, int right, int queryLeft, int queryRight){

    if(queryLeft <= left && right <= queryRight) return aint[node];

    int middle = (left + right) >> 1;

    if(queryRight <= middle) return query(2 * node, left, middle, queryLeft, queryRight);
    else if(queryLeft > middle) return query(2 * node + 1, middle + 1, right, queryLeft, queryRight);
    return max(
               query(2 * node, left, middle, queryLeft, queryRight),
               query(2 * node + 1, middle + 1, right, queryLeft, queryRight)
               );

}

void solve(){

    cin >> n >> queries;

    build(1, 1, n);

    for(int i = 0; i < queries; ++i){
        short op; int a, b; cin >> op >> a >> b;
        if(op == 0) cout << query(1, 1, n, a, b) << '\n';
        else update(1, 1, n, a, b);
    }


}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    freopen(INFILE, "r", stdin);
    freopen(OUTFILE, "w", stdout);
    solve();
    return 0;
}