Cod sursa(job #2188267)

Utilizator remus88Neatu Remus Mihai remus88 Data 27 martie 2018 00:53:13
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#define Nmax 100009

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

int n,m,MAX[4*Nmax],x,p;

void update (int node, int st, int dr, int A, int B, int val) {

    if (st==dr) {

        MAX[node]=val;
        return;
    }

    int mij= (st+dr)/2 , s1=node*2, s2=s1+1;

    if (A<=mij) update(s1, st, mij, A, B, val);
    else        update(s2, mij+1, dr, A, B, val);

    MAX[node] = max(MAX[s1],MAX[s2]);
}

int querry(int node, int st, int dr, int A, int B) {

    if (A<=st && dr<=B) {

        return MAX[node];
    }

    int sol1=0, sol2=0;

    int mij=(st+dr)/2, s1=2*node, s2=s1+1;

    if (A<=mij) sol1=querry(s1, st, mij, A, B);
    if (mij<B)  sol2=querry(s2, mij+1, dr, A, B);

    return max(sol1,sol2);
}

void ReadInput() {

    f>>n>>m;
    for (int i=1; i<=n; ++i) {

        f>>x;
        update(1, 1, n, i, i, x);
    }
}

void Solve() {

    for (int test=1; test<=m; ++test) {

        int A,B;

        f>>p>>A>>B;

        if (p==1) update(1, 1, n, A, A, B);

        else g<<querry(1, 1, n, A, B)<<'\n';
    }
}

int main() {

    ReadInput();
    Solve();

    f.close(); g.close();
    return 0;
}