Cod sursa(job #1277117)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 27 noiembrie 2014 09:48:59
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#define DIM 100011
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,r;
int v[4*DIM];

void update(int nod,int p,int u,int poz,int x){
    if(p==u){
        v[nod]=x;
        return;
    }
    int mid=p+(u-p)/2;
    if(poz<=mid)
        update(2*nod,p,mid,poz,x);
    if(poz>mid)
        update(2*nod+1,mid+1,u,poz,x);
    v[nod]=max(v[2*nod],v[2*nod+1]);
}

void query(int nod,int p,int u,int a,int b){
    if(a<=p && u<=b){
        r=max(r,v[nod]);
        return;
    }
    int mid=p+(u-p)/2;
    if(a<=mid)
        query(2*nod,p,mid,a,b);
    if(b>mid)
        query(2*nod+1,mid+1,u,a,b);
}

int main(void){
    register int i,j,x,t,a,b;

    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>x,update(1,1,n,i,x);
    for(i=1;i<=m;i++){
        f>>t>>a>>b;
        if(t==0){
            r=0;
            query(1,1,n,a,b);
            g<<r<<"\n";
        }
        else
            update(1,1,n,a,b);
    }
    f.close();
    g.close();
    return 0;
}