Cod sursa(job #1424637)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 25 aprilie 2015 10:10:30
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#define DIM 100002

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

int N,M;
int v[4*DIM];
int maxim;
void update(int nod,int p,int u,int poz,int val){
    if(p==u){
        v[nod]=val;
        return ;

    }
    int mid=(p+u)/2;

    if(poz<=mid)
        update(2*nod,p,mid,poz,val);
    else
        update(2*nod+1,mid+1,u,poz,val);

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

    }

    int mid=(p+u)/2;
    int maxim=-2000000000;

    if(a<=mid)
        query(2*nod,p,mid,a,b);
    if(b>mid)
        query(2*nod+1,mid+1,u,a,b);


}
int main(){
    fin>>N>>M;
    for(int i=1;i<=N;i++){
        int x;
        fin>>x;
        update(1,1,N,i,x);
    }
    while(M--){
        int op,a,b;
        fin>>op>>a>>b;
        if(op==0){
            maxim=-2000000000;
            query(1,1,N,a,b);
            fout<<maxim<<"\n";
        }
        else
            update(1,1,N,a,b);
    }
    return 0;
}