Cod sursa(job #1127957)

Utilizator UngureanuRobertUngureanu Robert Mihail UngureanuRobert Data 27 februarie 2014 14:28:49
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;

    ifstream f("arbint.in");
    ofstream g("arbint.out");

    long long arb[1<<19],n,m,i,x,y,z,maxim;

    void query(long nod,long st,long dr,long long a,long long b){
        if(a<=st && dr<=b){
            if(maxim<=arb[nod])
                maxim=arb[nod];
                return ;
            }

            long long mij=(st+dr)/2;
            if(a<=mij) query(2*nod,st,mij,a,b);
            if(b>=mij+1) query(2*nod+1,mij+1,dr,a,b);

    }

    void update(long long nod,long long st,long long dr,long long poz,long long val){
        if(st==dr){
            arb[nod]=val;
            return ;
            }

                long long mij=(st+dr)/2;
                if(poz<=mij) update(2*nod,st,mij,poz,val);
                else update(2*nod+1,mij+1,dr,poz,val);

        arb[nod]=max(arb[2*nod],arb[2*nod+1]);
    }



int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++){
        f>>x;
        update(1,1,n,i,x);
    }
    for(i=1;i<=m;i++){
        f>>x>>y>>z;maxim=0;
        if(x==0){
                query(1,1,n,y,z);
                g<<maxim<<'\n';
        }

        else
            update(1,1,n,y,z);
    }

    return 0;
}