Cod sursa(job #2679678)

Utilizator KPP17Popescu Paul KPP17 Data 1 decembrie 2020 11:06:13
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define fisier "arbint"
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
constexpr int log(int e)
{return e? log(e >> 1) + 1: 0;}
int V[1 << log(100000) + 1];
int main()
{
    int n, m, l; in >> n >> m; l = (1 << log(n)) - 1;
    for (int i = 1; i <= n; i++) in >> V[l + i];
    for (int i = l + n + 1; i; i--) if (i & 1)
        V[i >> 1] = std::max(V[i], V[i - 1]);
    while (m--)
    {
        bool v; int a, b; in >> v >> a >> b;
        if (v) for (V[a += l] = b; a >>= 1;)
            V[a] = std::max(V[a << 1], V[(a << 1) + 1]);
        else
        {
            int max = 0;
            for (a += l, b += l; a <= b; a >>= 1, b >>= 1)
            {
                if (a & 1)    max = std::max(max, V[a++]);
                if (!(b & 1)) max = std::max(max, V[b--]);
            }
            out << max << '\n';
        }
    }
}