Cod sursa(job #1690594)

Utilizator mihneacazCazacu Mihnea mihneacaz Data 15 aprilie 2016 12:35:16
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int tree[100005],maxim;
void update(int nod,int st,int dr,int poz,int val)
{
    if(st==dr)
    {
        tree[nod]=val;
        return ;
    }
    int mid;
    mid=(st+dr)/2;
    if(mid<poz)
        update(2*nod+1,mid+1,dr,poz,val);
    else
        update(2*nod,st,mid,poz,val);
    tree[nod]=max(tree[2*nod],tree[2*nod+1]);
}
void query(int nod,int st,int dr,int a,int b)
{
    if(a<=st && dr<=b)
       {
        maxim=max(maxim,tree[nod]);
        return ;
       }
    int mid;
    mid=(st+dr)/2;
    if(a<=mid)
        query(2*nod,st,mid,a,b);
    if(b>mid)
        query(2*nod+1,mid+1,dr,a,b);
}
int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int m,n,i,op,a,b,x;
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&x);
        update(1,1,n,i,x);
    }
    for(i=1; i<=m; i++)
    {
        scanf("%d%d%d",&op,&a,&b);
        if(op==0)
        {
            maxim=0;
            query(1,1,n,a,b);
            printf("%d\n",maxim);
        }
        else
            update(1,1,n,a,b);
    }
    return 0;
}