Cod sursa(job #2738925)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 6 aprilie 2021 15:54:50
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX  =1e5;
int aint[4*NMAX+5];
void update(int nod ,int st , int dr , int poz ,int val)
{
    if(st==dr)aint[nod]=val;
    else
    {
        int med = (st+dr)>>1;
        if(poz<=med)update(2*nod,st,med,poz,val);
        else
            update(2*nod+1,med+1,dr,poz,val);
        aint[nod]=max(aint[nod*2] , aint[2*nod+1]);
    }
}
int query(int nod ,int st , int dr , int a ,int b)
{
    if(a <= st && dr <= b)
        return aint[nod];
    else
    {
        int med = (st + dr)>>1;
        int x = 0 , y = 0;
        if(a <= med)
            x = query(nod*2,st,med,a,b);
        if(b > med)
        y = query(nod*2+1,med+1,dr,a,b);
        return max(x,y);
        return max(x,y);
    }
}
int v[NMAX];
int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int n , m , i , j  ,a , b , c;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        {scanf("%d",&v[i]);update(1,1,n,i,v[i]);}
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&c,&a,&b);
        if(c==1)
        {
            update(1,1,n,a,b);
        }
        else
            printf("%d\n",query(1,1,n,a,b));
    }
    return 0;
}