Cod sursa(job #1127795)

Utilizator UngureanuRobertUngureanu Robert Mihail UngureanuRobert Data 27 februarie 2014 13:51:12
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>

using namespace std;

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

    int arb[1<<17],n,m,i,x,y,z,maxim;

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

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

    }

    int update(int nod,int st,int dr,int poz,int val){
        if(st==dr){
            arb[nod]=val;
            return 0;
            }
        else
            {
                int 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){
            if(y<z){
                query(1,1,n,y,z);
                g<<maxim<<'\n';}
            else{
                query(1,1,n,z,y);
                g<<maxim<<'\n'; }
        }

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