Cod sursa(job #3161841)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 28 octombrie 2023 09:23:45
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;

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

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

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(nod*2, st, mij, idx, val);
    else update(nod*2+1, mij+1, dr, idx, val);
    aint[nod] = max(aint[nod*2], aint[nod*2+1]);
}

int query(int nod, int st, int dr, int sti, int dri){
    
    if(st == sti and dr == dri)
        return aint[nod];
        
    int mij = (st + dr)/2;
    
    if(dri <= mij)
        return query(nod*2, st, mij, sti, dri);
    if(sti > mij)
        return query(nod*2+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;
}