Cod sursa(job #1678078)

Utilizator abramburelAlamita Alin abramburel Data 6 aprilie 2016 23:26:03
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<iostream>
#include<cstdio>
using namespace std;
#define Nmax 100005
int a[4*Nmax],n,m,kmax,x,maxim,op,y;

void update(int k,int poz, int x,int p,int u){
kmax=max(k,kmax);
    if(p==u)
        a[k] = x;
    else{
        int mij;
        mij=(p+u)/2;
        if(poz<=mij)
            update(2*k,poz,x,p,mij);
        if(poz>mij)
            update(2*k+1,poz,x,mij+1,u);
        a[k]=max(a[2*k],a[2*k+1]);

    }
}

void query(int k, int st, int dr, int p,int u)
{
        if(st<=p && dr>=u) maxim=max(maxim,a[k]);

        else
            {
                int mij;
                mij=(p+u)/2;
                if(st<=mij)
                    query(2*k,st,dr,p,mij);
                if(dr>mij)
                    query(2*k+1,st,dr,mij+1,u);

            }
}

int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int i;
    cin>>n>>m;
    for(i=1;i<=n;i++){
        cin>>x;
        update(1,i,x, 1,n);
    }

    for(i=1;i<=m;i++){
        cin>>op>>x>>y;
        if(op==0)
            {   maxim=0;
                query(1,x,y,1,n);
                cout<<maxim<<"\n";
            }
        else
            update(1,x,y,1,n);
    }
    return 0;
}