Cod sursa(job #2856264)

Utilizator denisa0230Zarioiu Denisa denisa0230 Data 23 februarie 2022 17:20:12
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>

using namespace std;

const int NMAX=100000;

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

int arb_int[4*NMAX+2];

void update(int indice,int st,int dr,int pos,int val)
{
    if(st==dr)
    {
        arb_int[indice]=val;
        return;
    }
    int mid=(st+dr)/2;
    if(pos<=mid)
        update(2*indice,st,mid,pos,val);
    else
        update(2*indice+1,mid+1,dr,pos,val);
    arb_int[indice]=max(arb_int[2*indice],arb_int[2*indice+1]);
}

int query(int indice, int st,int dr,int l,int r)
{
    if(r<st||l>dr)
        return 0;
    if(l<=st&&dr<=r)
        return arb_int[indice];
    int mid=(st+dr)/2;
    int a1=query(2*indice,st,mid,l,r),a2=query(2*indice+1,mid+1,dr,l,r);
    return max(a1,a2);
}

int main()
{
    int n,m,i,x,t,y;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        cin>>x;
        update(1,1,n,i,x);
    }
    for(i=1;i<=m;i++)
    {
        cin>>t>>x>>y;
        if(t==0)
        {
            cout<<query(1,1,n,x,y)<<'\n';
        }
        else
        {
            update(1,1,n,x,y);
        }
    }
    return 0;
}