Cod sursa(job #332994)

Utilizator levap1506Gutu Pavel levap1506 Data 21 iulie 2009 10:50:33
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#define maxn 1000000
using namespace std;
long N,M,z[maxn],val,poz,op,start,finish,maxx,i;
void query(long nod,long st, long dr) {
    if (start<=st&&finish>=dr)
    {
        if (maxx<z[nod]) maxx=z[nod];
        return;
    }
    long mij=(st+dr)/2;
    if (start<=mij)
       query(2*nod,st,mij);
    if (mij<finish)
       query(2*nod+1,mij+1,dr);
}
void update(long nod,long st, long dr) {
    if (st==dr) {
        z[nod]=val;
        return;
    }
    long mij=(st+dr)/2;
    if (poz<=mij) update(2*nod,st,mij);
    else        update(2*nod+1,mij+1,dr);
    z[nod]=max(z[2*nod],z[2*nod+1]);
}
int main() {
    ifstream in;
    ofstream out;
    in.open("arbint.in");
    out.open("arbint.out");
    in >> N >> M;
    for (i=0;i<N;i++) {
        in >> val;
        poz=i+1;
        update(1,1,N);
    }
    for (i=0; i<M; i++) {
        in >> op >> poz >> val;
        switch (op) {
            case 0:
            maxx=-1;
            start=poz;
            finish=val;
            query(1,1,N);
            out << maxx << "\n";
            break;
            case 1:
            update(1,1,N);
            break;
        }

    }
    return 0;
}