Cod sursa(job #3362922)

Utilizator CorvinJudge0Corvin Judge CorvinJudge0 Data 13 august 2026 09:56:26
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <bits/stdc++.h>
using namespace std;

int n;

struct SegTree {
    vector<int> aint;
    SegTree(vector<int>& v) {
        aint.resize(4 * (n + 1));
        build(v);
    }
    int query(vector<int>& v, int a, int b, int i = 1, int j = n, int idx = 1) {
        if (i == a && j == b)
            return aint[idx];
        int mid = i + (j - i) / 2;
        if (b <= mid)
            return query(v, a, b, i, mid, 2 * idx);
        if (mid < a)
            return query(v, a, b, mid + 1, j, 2 * idx + 1);
        return max(query(v, a, mid, i, mid, 2 * idx),
                   query(v, mid + 1, b, mid + 1, j, 2 * idx + 1));
    }
    void update(vector<int>& v, int a, int x, int i = 1, int j = n, int idx = 1) {
        if (i == j) {
            aint[idx] = v[i] = x;
            return;
        }
        int mid = i + (j - i) / 2;
        if (a <= mid) {
            update(v, a, x, i, mid, 2 * idx);
        } else {
            update(v, a, x, mid + 1, j, 2 * idx + 1);
        }
        aint[idx] = max(aint[2 * idx], aint[2 * idx + 1]);
    }
private:
    void build(vector<int>& v, int i = 1, int j = n, int idx = 1) {
        if (i == j) {
            aint[idx] = v[i];
            return;
        }
        int mid = i + (j - i) / 2;
        build(v, i, mid, 2 * idx);
        build(v, mid + 1, j, 2 * idx + 1);
        aint[idx] = max(aint[2 * idx], aint[2 * idx + 1]);
    }
};

signed main() {
#ifndef LOCAL
    cin.tie(nullptr)->sync_with_stdio(false);
    freopen("arbint.in", "r", stdin);
    freopen("arbint.out", "w", stdout);
#endif

    int m; cin >> n >> m;
    vector<int> v(n + 1);
    for (int i = 1; i <= n; ++i) {
        cin >> v[i];
    }
    SegTree aint(v);
    while (m--) {
        int q, a, b; cin >> q >> a >> b;
        if (q == 0)
            cout << aint.query(v, a, b) << '\n';
        else
            aint.update(v, a, b);
    }


    return 0;
}