Cod sursa(job #2424487)

Utilizator derihvist28Derihvist Adelina derihvist28 Data 23 mai 2019 08:28:08
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
 
const int MAX_M = 10;
 
int v[1 << 18], n, m;
 
int a, b, pos, val;
 
inline void update(int p, int st, int dr) {
    if (st == dr) {
        v[p] = val;
        return;
    }
    int m = (st + dr) / 2;
    if (pos <= m) update(2 * p, st, m);
    else update(2 * p + 1, m + 1, dr);
    v[p] = std::max(v[2 * p], v[2 * p + 1]);
}
 
inline int query(int p, int st, int dr) {
    if (a <= st && dr <= b) return v[p];
    int m = (st + dr) / 2, v1 = 0, v2 = 0;
    if (a <= m) v1 = query(2 * p, st, m);
    if (b > m) v2 = query(2 * p + 1, m + 1, dr);
    return std::max(v1, v2);
}
 
int main() {
    std::ifstream in("arbint.in");
    std::ofstream out("arbint.out");
    int i, x;
    in >> n >> m;
    for (pos = 1; pos <= n; ++pos) {
        in >> val;
        update(1, 1, n);
    }
    for (i = 0; i < m; ++i) {
        in >> x >> a >> b;
        if (x == 0) out << query(1, 1, n) << '\n';
        else {
            pos = a;
            val = b;
            update(1, 1, n);
        }
    }
    return 0;
}