Cod sursa(job #2166972)

Utilizator bpalaniciPalanici Bogdan bpalanici Data 13 martie 2018 19:41:09
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

int arb[100005 * 4];


void update(int nod, int l, int r, int x, int y) {
    if (l == r) {
        arb[nod] = y;
        return;
    }
    int mid = (l + r) >> 1;
    if (x <= mid)
        update(nod >> 1, l, mid, x, y);
    else
        update((nod >> 1) + 1, mid + 1, r, x, y);
    arb[nod] = max(arb[nod >> 1], arb[(nod >> 1) + 1]);
}

int querry(int nod, int l, int r, int x, int y) {
    if (x <= l && r <= y)
        return arb[nod];
    int mid = (l + r) / 2;
    int ans1 = -1, ans2 = -1;
    if (x <= mid)
        ans1 = querry(nod >> 1, l, mid, x, y);
    if (mid < y)
        ans2 = querry((nod >> 1) + 1, mid + 1, r, x, y);
    return max(ans1, ans2);
}

int n, m;

int main() {
    ios_base::sync_with_stdio(false);
    freopen("arbint.in", "r", stdin);
    freopen("arbint.out", "w", stdout);
    cin >> n >> m;
    for (int i = 1, x; i <= n; i++)
        cin >> x,
        update(1, 1, n, i, x);
    for (int i = 1, op, x, y; i <= m; i++) {
        cin >> op >> x >> y;
        if (!op)
            cout << querry(1, 1, n, x, y)  << "\n";
        else
            update(1, 1, n, x, y);
    }
    return 0;
}