Cod sursa(job #2904470)

Utilizator Mustatoiu-Ioan-SebastianMustatoiu Ioan-Sebastian Mustatoiu-Ioan-Sebastian Data 17 mai 2022 23:43:06
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
using namespace std;
#define INF 999999999;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m, a[2000005];
void update(int nod, int l, int r, int p, int v) {
    if (l == r)
    {
        a[nod] = v;
        return;
    }
    int m = (l + r) / 2;
    int ls = nod * 2, rs = ls + 1;
    if (p <= m)
         update(ls, l, m, p, v);
    else
         update(rs, m + 1, r, p, v);
    a[nod] = max(a[ls], a[rs]);
}
int query(int nod, int l, int r, int ql, int qr) {
    if (ql <= l && r <= qr) {
        return a[nod];
    }
    int m = (l + r) / 2;
    int ls = nod * 2, rs = ls + 1;
    int ans = -INF;
    if (ql <= m)
        ans = max(ans, query(ls, l, m, ql, qr));
    if (qr > m)
        ans = max(ans, query(rs, m+1, r, ql, qr));
    return ans;
}
void read() {
    in >> n >> m;
    int v;
    for (int i = 1; i <= n; ++i) {
        in >> v;
        update(1, 1, n, i, v);
    }
}
int main() {
    read();
    bool tip;
    int a, b;
    for (int i = 0; i < m; ++i) {
        in >> tip >> a >> b;
        if (tip) {
            update(1, 1, n, a, b);
        }
        else
            out << query(1, 1, n, a, b) << "\n";
    }
    return 0;
}