Cod sursa(job #2771192)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 25 august 2021 22:22:37
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>

using namespace std;

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

constexpr int NMAX = 1e5 + 5;

int N, Q;
int arb[4*NMAX];

void Update (int nod, int a, int b, int poz, int val)
{
    if (a == b)
    {
        arb[nod] = val;

        return;
    }

    int mij = (a + b) / 2;

    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)
{
    if (qa <= a && b <= qb) return arb[nod];

    int mij = (a + b) / 2;
    int ans_1 = 0, ans_2 = 0;

    if (qa <= mij) ans_1 = query(2*nod, a, mij, qa, qb);
    if (mij < qb) ans_2 = query(2*nod+1, mij+1, b, qa, qb);

    return max(ans_1, ans_2);
}

void Read ()
{
    f >> N >> Q;

    for (int i = 1; i <= N; ++i)
    {
        int x;

        f >> x;

        Update(1, 1, N, i, x);
    }
}

void Solve ()
{
    for (int i = 1; i <= Q; ++i)
    {
        int tip, a, b;

        f >> tip >> a >> b;

        if (tip == 0) g << query(1, 1, N, a, b) << '\n';
        else Update(1, 1, N, a, b);
    }
}

int main ()
{
    Read();

    Solve();

    return 0;
}