Cod sursa(job #3367105)

Utilizator VladStroicaStroica Vlad Cristian VladStroica Data 6 octombrie 2026 10:44:40
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;
int n,m;
int aib[400005];
int put=1;
void upd(int pz)
{
    while(pz!=1)
    {
        if(pz%2==1)
            pz--;
        aib[pz/2]=max(aib[pz],aib[pz+1]);
        pz=pz/2;
    }
}
int afis(int st,int dr)
{
    int mxm=0;
    while(st<=dr)
    {
        if(st%2==1)
        {
            mxm=max(mxm,aib[st++]);
        }
        st=st/2;
        if(dr%2==0)
        {
            mxm=max(mxm,aib[dr--]);
        }
        dr=dr/2;
    }
    return mxm;
}
int main()
{
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");
    cin>>n>>m;
    while(put<n)
        put*=2;
    for(int i=0;i<n;i++)
    {
        cin>>aib[i+put];
    }
    for(int i=put-1;i>0;i--)
    {
        aib[i]=max(aib[2*i],aib[2*i+1]);
    }
    for(int i=1;i<=m;i++)
    {
        int cer,a,b;
        cin>>cer>>a>>b;
        a+=put-1;
        if(cer==1)
        {
            aib[a]=b;
            upd(a);
        }
        else
        {
            b+=put-1;
            cout<<afis(a,b)<<'\n';
        }
    }
    return 0;
}