Cod sursa(job #2642116)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 13 august 2020 18:20:41
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX=100005;
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[2*nod],aint[2*nod+1]);
    }
}
int query(int nod ,int st, int dr,int l,int r)
{
    if(l<=st&&dr<=r)
        return aint[nod];
    int med=(st+dr)>>1;
    int a = 0 ,b=0;
    if(l<=med)a=query(2*nod,st,med,l,r);
    if(r>med)
        b=query(2*nod+1,med+1,dr,l,r);
    return max(a,b);
}
int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int n , q , i , a , b;
    scanf("%d%d",&n,&q);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a);
        update(1,1,n,i+1,a);
    }
    for(i = 1;i<=q;i++)
    {
        int t;
        scanf("%d%d%d",&t,&a,&b);
        if(t == 1)update(1,1,n,a,b);
        else
            printf("%d\n",query(1,1,n,a,b));
    }
    return 0;
}