Cod sursa(job #2838946)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 24 ianuarie 2022 22:10:10
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
using namespace std;

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

const int dim=100009;

struct SegmentTree{
    int aint[8*dim];
    void update(int nod,int tl,int tr,int poz,int val){
        if(tl==tr){
            aint[nod]=val;
            return;
        }
        int tm=(tl+tr)/2;
        if(poz<=tm){
            update(2*nod,tl,tm,poz,val);
        }
        else{
            update(2*nod+1,tm+1,tr,poz,val);
        }
        aint[nod]=max(aint[2*nod],aint[2*nod+1]);
    }
    int query(int nod,int tl,int tr,int l,int r){
        if(l==tl && r==tr){
            return aint[nod];
        }
        int tm=(tl+tr)/2;
        if(r<=tm){
            return query(2*nod,tl,tm,l,r);
        }
        if(l>tm){
            return query(2*nod+1,tm+1,tr,l,r);
        }
        return max(query(2*nod,tl,tm,l,tm),query(2*nod+1,tm+1,tr,tm+1,r));
    }
}aint;

signed main(){
    int n,q;
        fin>>n>>q;
    for(int i=1;i<=n;i++){
        int x;
        fin>>x;
        aint.update(1,1,n,i,x);
    }
    while(q--){
        int op;
        fin>>op;
        if(op==0){
            int l,r;
            fin>>l>>r;
            fout<<aint.query(1,1,n,l,r)<<'\n';
        }
        else{
            int a,b;
            fin>>a>>b;
            aint.update(1,1,n,a,b);
        }
    }
}