Cod sursa(job #2084131)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 8 decembrie 2017 17:49:32
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;

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

int arbore[400000], i, j, n, x, y, m, nr, z;
void act(int a, int b, int nod, int poz, int val)
{
    if (a==b)
    {
        arbore[nod]=val;
        //return;
    }
    else
    {
        int mij=(a+b)/2;
        if (poz<=mij)
            act(a, mij, nod*2, poz, val);
        else
            act(mij+1, b, nod*2+1, poz, val);
        arbore[nod]=max(arbore[2*nod], arbore[2*nod+1]);
    }
}

int que(int a, int b, int nod, int l, int r)
{
    int r1=0;
    int r2=0;
    if (l<=a && r>=b)
        return arbore[nod];
    int mij=(a+b)/2;
    if (l<=mij)
        r1=que(a, mij, 2*nod, l, r);
    if (mij<r)
        r2=que(mij+1, b, 2*nod+1, l, r);
    return max(r1, r2);
}

int main()
{
    f>>n>>m;
    for (i=1; i<=n; i++)
    {
        f>>x;
        act(1, n, 1, i, x);
    }
    for (i=1; i<=m; i++)
    {
        f>>x>>y>>z;
        if (x==1) act(1, n, 1, y, z);
        else g<<que(1, n, 1, y, z)<<'\n';
    }
    return 0;
}