Cod sursa(job #1348290)

Utilizator Eduard6421Eduard Gabriel Eduard6421 Data 19 februarie 2015 17:00:11
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include<fstream>
#define NMAX 600005
#define max(a,b) a > b ? a : b
using namespace std;

int aint[NMAX];
int v[NMAX];
int n,ans;

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

void update(int nod,int st,int dr,int poz,int val) {
    int med;


    if(st==dr) {
        aint[nod]=val;
        return;
    }

    med=(st+dr)/2;


    if(poz<=med)
        update(2*nod,st,med,poz,val);

    else
        update(2*nod+1,med+1,dr,poz,val);

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


}


void query(int nod,int st,int dr,int x,int y) {

    int med;

    if(x<=st&&y>=dr) {
        ans=max(ans,aint[nod]);
        return;

    }

    med=(st+dr)/2;



    if(x<=med)
        query(2*nod,st,med,x,y);

    if(y>med)
        query(2*nod+1,med+1,dr,x,y);



}



int main() {

    \


    int m;
    int i;
    int val,type,x,y;


    f>>n>>m;

    for(i=1; i<=n; ++i) {
        f>>val;
        update(1,1,n,i,val);

    }

    for(i=1; i<=m; ++i) {
        f>>type;
        if(type) {


            f>>x>>y;
            update(1,1,n,x,y);


        }

        else {
            ans=0;
            f>>x>>y;
            query(1,1,n,x,y);
            g<<ans<<"\n";
        }


    }


}