Cod sursa(job #3325748)

Utilizator Iustin.DDragusanu Iustin Iustin.D Data 26 noiembrie 2025 11:48:32
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
using namespace std;

ifstream cin("arbint.in");
ofstream cout("arbint.out");

#define int long long

int n,arr[100005],v[500005],mx;

void build(int l,int r,int nd)
{
    if (l==r)
    {
        v[nd]=arr[l];
        return;
    }
    int mid=(l+r)/2;
    build(l,mid,nd*2);
    build(mid+1,r,nd*2+1);
    v[nd]=max(v[nd*2],v[nd*2+1]);
}

void update(int l,int r,int pos,int val,int nd)
{
    if (l==r)
    {
        v[nd]=val;
        return;
    }
    int mid=(l+r)/2;
    if (pos<=mid) update(l,mid,pos,val,nd*2);
    else update(mid+1,r,pos,val,nd*2+1);
    v[nd]=max(v[nd*2],v[nd*2+1]);

}

void sol(int l,int r,int ql,int qr,int nd)
{
    if (r<ql||l>qr) return;
    if (ql<=l&&r<=qr)
    {
        mx=max(v[nd],mx);
        return;
    }
    int mid=(l+r)/2;
    sol(l,mid,ql,qr,nd*2);
    sol(mid+1,r,ql,qr,nd*2+1);
}

int32_t main()
{
    int n,q;
    cin>>n>>q;
    for (int i=1; i<=n; i++) cin>>arr[i];
    build(1,n,1);
    for (int i=1; i<=q; i++)
    {
        int cer,a,b;
        cin>>cer>>a>>b;
        if (cer==0) {mx=0; sol(1,n,a,b,1); cout<<mx<<"\n";}
        else update(1,n,a,b,1);
    }
}