Cod sursa(job #3319756)

Utilizator Deleanu_LucaDeleanu Luca Deleanu_Luca Data 3 noiembrie 2025 10:14:32
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include<iostream>
#include<fstream>
#define NMAX 100007

using namespace std;

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

int ST[4*NMAX], A[NMAX];
int N, M;

void updateST(int node, int left, int right, int pos, int val){
    if(left == right){
        ST[node] = val;
        return;
    }

    int mid = (left + right) / 2;
    if(pos <= mid)
        updateST(2*node, left, mid, pos, val);
    else
        updateST(2*node+1, mid+1, right, pos, val);

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

int queryST(int node, int left, int right, int x, int y)
{
    if(x <= left && right <= y)
        return ST[node];
    if(y <= left || right <= x)
        return 0;

    int mid=(left+right)/2;
    int ans_l = queryST(2*node, left, mid, x, y);
    int ans_r = queryST(2*node+1, mid+1, right, x, y);
    return max(ans_l, ans_r);
}

int main(){
    
    fin>>N>>M;

    for(int i=1; i<=N; ++i){
        fin>>A[i];
        updateST(1, 1, N, i, A[i]);
    }

    int a, b, c;

    for(int i=0; i<M; ++i){
        fin>>c>>a>>b;
        if(c==0){
            fout<<queryST(1, 1, N, a, b)<<'\n';
        }
        else{
            updateST(1, 1, N, a, b);
        }
    }

    return 0;
}