Cod sursa(job #2374159)

Utilizator Vlad3108Tir Vlad Ioan Vlad3108 Data 7 martie 2019 17:16:08
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define LMAX 100005
using namespace std;
int AINT[4*LMAX];
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 st_q,int dr_q){
    if(dr<st_q||dr_q<st)
        return 0;
    if(st_q<=st&&dr<=dr_q)
        return AINT[nod];
    int mij=(st+dr)/2;
    return max(Query(2*nod,st,mij,st_q,dr_q),Query(2*nod+1,mij+1,dr,st_q,dr_q) );
}
int main(){
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int n,q;
    scanf("%d %d",&n,&q);
    for(int i=1;i<=n;++i){
        int x;
        scanf("%d",&x);
        Update(1,1,n,i,x);
    }
    while(q--){
        int tip,a,b;
        scanf("%d %d %d",&tip,&a,&b);
        if(tip==0)
            printf("%d\n",Query(1,1,n,a,b));
        else if(tip==1)
            Update(1,1,n,a,b);
    }
    return 0;
}