Cod sursa(job #2889004)

Utilizator _andrei4567Stan Andrei _andrei4567 Data 12 aprilie 2022 01:33:31
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>

using namespace std;

ifstream cin ("arbint.in");
ofstream cout ("arbint.out");

const int N = 4e5 + 5;
int arb[N];

int n, m, pos, val, x, a, b, mx, beginus, endus;

void update(int nod, int l, int r)
{
    if (l == r)
    {
        arb[nod] = val;
        return;
    }
    int mid = (l + r) >> 1;
    if (pos <= mid) update((nod << 1), l, mid);
    else update((nod << 1) + 1, mid + 1, r);
    arb[nod] = max (arb[(nod << 1)], arb[(nod << 1) + 1]);
}
void query (int nod, int l, int r)
{
    if (beginus <= l && r <= endus)
    {
        mx = max (mx, arb[nod]);
        return;
    }
    int mid = (l + r) >> 1;
    if (beginus <= mid) query((nod << 1), l, mid);
    if (endus > mid)query ((nod << 1) + 1, mid + 1, r);
}

int main ()
{
    cin >> n >> m;
    for (int i = 1; i <= n; ++i)
    {
        cin >> x;
        pos = i;
        val = x;
        update(1, 1, n);
    }
    for (int i = 1; i <= m; ++i)
    {
        cin >> x >> a >> b;
        if (!x)
        {
            mx = -1;
            beginus = a;
            endus = b;
            query (1, 1, n);
            cout << mx << '\n';
        }
        else
        {
            pos = a;
            val = b;
            update (1, 1, n);
        }
    }
}