Cod sursa(job #2766233)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 31 iulie 2021 13:49:43
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
using namespace std;

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

const int dim=100009;

int n,m;
int v[dim],aint[4*dim];

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

    aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}

int Query(int nod,int st,int dr,int l,int r){
    if(st==l&&dr==r)
        return aint[nod];
    int mij=(st+dr)/2;
    if(r<=mij)
        return Query(2*nod,st,mij,l,r);
    else
        if(l>=mij+1)
            return Query(2*nod+1,mij+1,dr,l,r);
        else
            return max(Query(2*nod,st,mij,l,mij),Query(2*nod+1,mij+1,dr,mij+1,r));
}

signed main(){
        fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>v[i];
        Update(1,1,n,i,v[i]);
    }

    for(int i=1;i<=m;i++){
        int c;
        fin>>c;
        if(c==1){
            int pos,val;
            cin>>pos>>val;
            Update(1,1,n,pos,val);
        }
        if(c==0){
            int st,dr;
            fin>>st>>dr;
            if(st>dr)
                swap(st,dr);
            fout<<Query(1,1,n,st,dr)<<'\n';
        }
    }
}