Cod sursa(job #3369659)

Utilizator luca._.solosluca solos luca._.solos Data 21 octombrie 2026 13:18:17
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5;

int N, Q;
int seg[4 * MAXN];

int update(int x, int l, int r, int val, int p) {
    if (p < l || p > r) {
        return seg[x];
    }
    if (l == r) {
        return seg[x] = val;
    }

    int md = (l + r) / 2;
    return seg[x] = max(update(2 * x, l, md, val, p), update(2 * x + 1, md + 1, r, val, p));
}

int query(int x, int l, int r, int L, int R) {
    if (r < L || R < l) {
        return 0;
    }
    if (L <= l && r <= R) {
        return seg[x];
    }

    int md = (l + r) / 2;
    return max(query(2 * x, l, md, L, R), query(2 * x + 1, md + 1, r, L, R));
}

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

    cin >> N >> Q;

    for (int i = 1; i <= N; i++) {
        int x;
        cin >> x;
        update(1, 1, N, x, i);
    }

    while (Q--) {
        int t, x, y;
        cin >> t >> x >> y;

        if (t == 0) {
            cout << query(1, 1, N, x, y) << '\n';
        }
        else {
            update(1, 1, N, y, x);
        }
    }
}