Cod sursa(job #2470487)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 9 octombrie 2019 12:02:01
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;
int aint[400005];
void update(int nod,int a,int b,int poz,int val)
{
    if(a==b)
        aint[nod]=val;
    else
    {
    int med=(a+b)/2;
    if(poz<=med)
        update(2*nod,a,med,poz,val);
    if(poz>med)
        update(2*nod+1,med+1,b,poz,val);
   aint[nod]=max(aint[2*nod],aint[2*nod+1]);
 }
}
int query(int nod,int a,int b,int x,int y)
{
    if(x<=a&&y>=b)return aint[nod];
    else
    {
        int med=(a+b)/2,x1=0,y1=0;
        if(x<=med)
            x1=query(2*nod,a,med,x,y);
        if(y>med)
        y1=query(2*nod+1,med+1,b,x,y);
        return max(x1,y1);
    }
}
int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int n,m,i,nr;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&nr);
        update(1,1,n,i,nr);
    }
    int stare,x=0,y=0;
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&stare,&x,&y);
        if(stare==1)
        {
            update(1,1,n,x,y);
        }
        else
            cout<<query(1,1,n,x,y)<<"\n";
    }
    return 0;
}