Cod sursa(job #2120749)

Utilizator nerelog25Radu Andrei Stefan nerelog25 Data 2 februarie 2018 20:49:47
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#define NMAX 500001

using namespace std;

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

int t[NMAX], n, m;

inline void update(int nod, int stg, int dr, int a, int b)
{
    if(stg==dr)t[nod]=b;
    else{
        int mij = (stg + dr)>>1;
        if(a<=mij) update(2 * nod, stg, mij, a, b);
        else update(2 * nod + 1, mij + 1, dr, a, b);
        t[nod]=max(t[2*nod],t[2*nod+1]);
    }
}

inline int query(int nod, int stg, int dr, int a, int b)
{
    int mx=-1e9;
    if(a<=stg && b>=dr) return t[nod];
    else{
        int mij = (stg + dr)>>1;

        if(a<=mij)mx=max(mx, query(2*nod,stg,mij,a,b));
        if(b>mij)mx=max(mx, query(2*nod+1,mij+1,dr,a,b));
    }
    return mx;
}

int main()
{
    int i, op, a, b, x;

    f>>n>>m;
    for(i=1;i<=n;i++){
        f>>x;
        update(1,1,n,i,x);
    }
    for(i=1;i<=m;i++){
        f>>op>>a>>b;

        switch(op){
            case 1:{
                update(1, 1, n, a, b);
                break;
            }
            case 0:{
                g<<query(1, 1, n, a, b)<<'\n';
                break;
            }
        }
    }
    return 0;
}