Cod sursa(job #3327197)

Utilizator yellowGreenFatu Mihai yellowGreen Data 2 decembrie 2025 18:59:40
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,q,A[100005];
int aint[200005];
void build()
{
    for(int i=0;i<n;i++)
        aint[n+i]=A[i+1];
    for(int i=n-1;i>=1;i--)
        aint[i]=max(aint[2*i],aint[2*i+1]);
}
int query(int l,int r)
{
    int ans=0;
    for(l+=n-1,r+=n;l<r;l>>=1,r>>=1)
    {
        if(l&1) ans=max(ans,aint[l++]);
        if(r&1) ans=max(ans,aint[--r]);
    }
    return ans;
}
void update(int x,int v)
{
    x+=n-1;
    aint[x]=v;
    for(x>>=1;x;x>>=1)
    {
        aint[x]=max(aint[2*x],aint[2*x+1]);
    }
}
int main()
{
    cin>>n>>q;
    for(int i=1;i<=n;i++)
        cin>>A[i];
    build();
    int op,a,b;
    while(q--)
    {
        cin>>op>>a>>b;
        if(op==0)
            cout<<query(a,b)<<"\n";
        else
            update(a,b);
    }
    return 0;
}