Cod sursa(job #2211657)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 11 iunie 2018 11:58:05
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>

using namespace std;

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

int n, m, x, cer, a, b;
int arb[100000 * 4 + 2];

void update (int nod, int a, int b, int poz, int val)
{
    int mij = (a + b) / 2;
    if (a == b) arb[nod] = val;
    else
    {
        if (poz <= mij) update(2 * nod, a, mij, poz, val);
        else update(2 * nod + 1, mij + 1, b, poz, val);
        arb[nod] = max(arb[2 * nod], arb[2 * nod + 1]);
    }
}

int query (int nod, int a, int b, int qa, int qb)
{
    int m1 = 0, m2 = 0, mij;
    if (qa <= a && b <= qb) return arb[nod];

    mij = (a + b) / 2;
    if (qa <= mij) m1 = query (2 * nod, a, mij, qa, qb);
    if (qb > mij) m2 = query(2 * nod + 1, mij + 1, b, qa, qb);

    return max(m1,m2);
}
int main()
{
    f >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        f >> x;
        update(1,1,n,i,x);
    }
    for (int i = 1; i <= m; i++)
    {
        f >> cer;
        if (cer == 0)
        {
            f >> a >> b;
            g << query(1,1,n,a,b) << '\n';
        }
        else
        {
            f >> a >> b;
            update(1,1,n,a,b);
        }
    }
    return 0;
}