Cod sursa(job #2414117)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 24 aprilie 2019 10:03:09
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX=100005;
int aint[4*NMAX];
void update(int nod ,int st,int dr,int poz,int val)
{
    if(st==dr)
        aint[nod]=val;
    else
        {
           int med=(st+dr)/2;
           if(poz<=med)update(2*nod,st,med,poz,val);
           if(med<poz)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 a,int b)
{
    if(st>=a&&dr<=b)return aint[nod];
    else
    {
        int med=(st+dr)/2;
        int a1=0;
        if(med>=a)a1=query(2*nod,st,med,a,b);
        int b1=0;
        if(b>med)b1=query(2*nod+1,med+1,dr,a,b);
        return max(a1,b1);
    }
}
int v[NMAX];
int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int n,x,y,z,m,i,j;
    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",&x,&y,&z);
        if(x==1)update(1,1,n,y,z);
        else
            printf("%d\n",query(1,1,n,y,z));
    }
    return 0;
}