Cod sursa(job #3349262)

Utilizator Tudor28Ceclan Tudor Tudor28 Data 26 martie 2026 22:28:30
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <fstream>
#include <iostream>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int aint[100005];
void query(int cntIndex, int ql, int qr, int l, int r, int &ans)
{
    if (ql <= l && r <= qr)
    {
        ans = max(ans, aint[cntIndex]);
        return;
    }
    int mid = (l + r) / 2;
    if (ql <= mid)
    {
        query(cntIndex * 2, ql, qr, l, mid, ans);
    }
    if (mid < qr)
    {
        query(cntIndex * 2 + 1, ql, qr, mid + 1, r, ans);
    }
}
void update(int cntIndex, int l, int r, int pos, int val)
{
    if (l == r)
    {
        aint[cntIndex] = val;
        return;
    }
    int mid = (l + r) / 2;
    if (pos <= mid)
    {
        update(cntIndex * 2, l, mid, pos, val);
    }
    else
    {
        update(cntIndex * 2 + 1, mid + 1, r, pos, val);
    }
    aint[cntIndex] = max(aint[cntIndex * 2], aint[cntIndex * 2 + 1]);
}
int main()
{
    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        int x;
        fin >> x;
        update(1, 1, n, i, x);
    }
    for (int i = 1; i <= m; i++)
    {
        int c, a, b;
        fin >> c >> a >> b;

        if (c == 0)
        {
            int ans = 0;
            if (a > b)
            {
                swap(a, b);
            }
            query(1, a, b, 1, n, ans);
            fout << ans << '\n';
        }
        if (c == 1)
        {
            update(1, 1, n, a, b);
        }
    }
    return 0;
}