Cod sursa(job #2999525)

Utilizator LXGALXGA a LXGA Data 11 martie 2023 10:02:51
Problema Arbori de intervale Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m,a,b,c,x;
int t[400001];
void update(int nod,int pos,int val,int l,int r)
{
    if(l==r)
        t[nod]=val;
    else
    {
        int mid=(l+r)/2;
        if(pos<=mid)
            update(2*nod,pos,val,l,mid);
        else
            update(2*nod+1,pos,val,mid+1,r);
        t[nod]=max(t[nod*2],t[nod*2+1]);
    }
}
int maxx(int nod,int tl,int tr,int l,int r)
{
    if(tl<=l && r<=tr)
        return t[nod];
    if(l==r)
        return 0;
    int mid=(l+r)/2;
    int ansl=0,ansr=0;
    if(mid>=l)
        ansl=maxx(2*nod,tl,tr,l,mid);
    if(mid<r)
        ansr=maxx(2*nod+1,tl,tr,mid+1,r);
    return max(ansl,ansr);
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        update(1,i,x,1,n);
    }
    while(m--)
    {
        cin>>c>>a>>b;
        if(c==0)
            cout<<maxx(1,a,b,1,n)<<'\n';
        else
            update(1,a,b,1,n);
    }
    return 0;
}