Cod sursa(job #3302211)

Utilizator Tudor_CCTudor Cocu Tudor_CC Data 4 iulie 2025 21:21:41
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

int mx[500055];

void up(int l,int r,int e,int in,int el)
{
    int mij;
    mij=(l+r)/2;
    if(l==r)
    {
        mx[in]=el;
    }
    else
    {
        if(e>=l && e<=mij)
        {
            up(l,mij,e,in*2,el);
        }
        else
        {
            up(mij+1,r,e,in*2+1,el);
        }
        mx[in]=max(mx[in*2],mx[in*2+1]);
    }
}


int mxx=0;

void nr(int l,int r,int s,int d,int in)
{
    if(l>=s && r<=d)
    {
        if(mx[in]>mxx)
        {
            mxx=mx[in];
        }
    }
    else
    {
        int mij=(l+r)/2;
        if(s<=mij)
        {
            nr(l,mij,s,d,in*2);
        }
        if(mij+1<=d)
        {
            nr(mij+1,r,s,d,in*2+1);
        }
    }
}

int main()
{
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");
    int n,m,x;
    cin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        cin>>x;
        up(1,n,i,1,x);
    }
    int caz,aa,bb;
    for(int i=1;i<=m;++i)
    {
        cin>>caz;
        if(caz==0)
        {
            cin>>aa>>bb;
            mxx=0;
            nr(1,n,aa,bb,1);
            cout<<mxx<<"\n";
        }
        else
        {
            cin>>aa>>bb;
            up(1,n,aa,1,bb);
        }
    }
    return 0;
}