Cod sursa(job #3161291)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 26 octombrie 2023 15:48:04
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("arbint.in");
ofstream g ("arbint.out");

const int NMAX = 1e5;
int aint[4 * NMAX + 5];

void update(int nod, int st, int dr, int idx, int val){
    if(st == dr){
        aint[nod] = val;
        return;
    }
    
    int mij = (st + dr)/2;
    if(idx <= mij)
        update(2*nod, st, mij, idx, val);
    else
        update(2*nod+1, mij+1, dr, idx, val);
    aint[nod] = max(aint[nod*2], aint[2*nod+1]);
}

int query(int nod, int st, int dr, int sti, int dri){
    if(st == sti and dri == dr)
        return aint[nod];
        
    int mij = (st + dr)/2;
    
    if(dri <= mij)
        return query(nod*2, st, mij, sti, dri);
    
    if(sti > mij)
        return query(2*nod+1, mij+1, dr, sti, dri);
    
    return max(
        query(nod*2, st, mij, sti, mij),
        query(nod*2+1, mij+1, dr, mij+1, dri)
    );
    
    
}

int main()
{
    int n, q;
    f >> n >> q;
    for(int i=1; i<=n; i++){
        int val;
        f >> val;
        update(1, 1, n, i, val);
    }
    
    for(int i=1; i<=q; i++){
        int t, x, y;
        f >> t >> x >> y;
        if(t == 0)
            g << query(1, 1, n, x, y) << "\n";
        else{
            update(1, 1, n, x, y);
        }
    }
    
    return 0;
}