Cod sursa(job #3157303)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 15 octombrie 2023 12:13:21
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 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];
int n, q;

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);
    else 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 ist, int idr){
    
    
    
    if(st >= ist and dr <= idr)
        return aint[nod];
        
    int mij = (st+dr)/2;
    
    int aux = -1;
    if(ist <= mij)
        aux = max(aux, query(2*nod, st, mij, ist, idr));
    if(idr > mij)
        aux = max(aux, query(2*nod+1, mij+1, dr, ist, idr));
    
    return aux;
    
}

int main()
{

    f >> n >> q;
    for(int i=1; i<=n; i++){
        int k;
        f >> k;
        update(1, 1, n, i, k);
    }
    
    for(int i=1; i<=q; i++){
        int t, a, b;
        f >> t >> a >> b;
        if(t == 0)
            g << query(1, 1, n, a, b) << "\n";
        else{
            update(1, 1, n, a, b);
        }
    }
    
    return 0;
}