Cod sursa(job #2757173)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 4 iunie 2021 11:38:47
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>

using namespace std;

const int P2MAX = (1 << 18);
const int INF = 1 << 30;

int aint[P2MAX], poz, val, a, b;

void update(int p, int st, int dr) {
    if (st == dr) {
        aint[p] = val;
        return;
    }
    int m = (st + dr) / 2;
    if (poz <= m)
        update(2 * p, st, m);
    else
        update(2 * p + 1, m + 1, dr);
    aint[p] = max(aint[2 * p], aint[2 * p + 1]);
}

int query(int p, int st, int dr) {
    if (st >= a && dr <= b)
        return aint[p];
    int m = (st + dr) / 2, max_st = -INF, max_dr = -INF;
    if (a <= m)
        max_st = query(2 * p, st, m);
    if (b > m)
        max_dr = query(2 * p + 1, m + 1, dr);
    return max(max_st, max_dr);
}

int main() {
    ifstream in("arbint.in");
    ofstream out("arbint.out");
    int n, q;
    in >> n >> q;
    for (poz = 1; poz <= n; ++poz) {
        in >> val;
        update(1, 1, n);
    }
    while (q--) {
        bool tip;
        in >> tip;
        if (!tip) {
            in >> a >> b;
            out << query(1, 1, n) << '\n';
        }
        else {
            in >> poz >> val;
            update(1, 1, n);
        }
    }
    in.close();
    out.close();
    return 0;
}