Cod sursa(job #1166094)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 3 aprilie 2014 11:13:36
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<fstream>
using namespace std;
int N,M,val,poz,MaxArb[400010],start,stop,maxim;

void update(int nod,int st,int dr){

    if(st==dr){
        MaxArb[nod]=val;
        return ;
    }
    int mij=(st+dr)/2;
    if(poz<=mij)
        update(2*nod,st,mij);
    else
        update(2*nod+1,mij+1,dr);
    MaxArb[nod]=max(MaxArb[2*nod],MaxArb[2*nod+1]);

}

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

    if(start<=st && dr<=stop) {
        maxim=max(maxim,MaxArb[nod]);
        return;
    }
    int mij=(st+dr)/2;
    if(start<=mij)
        query(2*nod,st,mij);
    if(mij<stop)
        query(2*nod+1,mij+1,dr);

}

int main() {

    ifstream in("arbint.in");
    ofstream out("arbint.out");
    int i,tip,x,y;
    in>>N>>M;
    for(i=1;i<=N;i++){
        in>>val;
        poz=i;
        update(1,1,N);
    }

    for(i=1;i<=M;i++){
        in>>tip>>x>>y;
        if(tip==1){
            val=y;
            poz=x;
            update(1,1,N);
        }
        if(tip==0) {
            maxim=-1;
            start=x;
            stop=y;
            query(1,1,N);
            out<<maxim<<'\n';

        }
    }

    in.close();
    out.close();
    return 0;

}