Cod sursa(job #2904587)

Utilizator larisa-ioana.virtejanuLarisa Ioana Virtejanu larisa-ioana.virtejanu Data 18 mai 2022 00:08:32
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
#include <cmath>
 
int aint[400005];
 
int querry(int l, int r, int nod, int il, int ir) {
    if (l == il && r == ir) {
        return aint[nod];
    }
    else {
        int mid = (l + r) / 2, ans = 0;
        if (il <= mid) {
            ans = querry(l, mid, 2 * nod, il, std::min(mid, ir));
        }
        if (mid < ir) {
            ans = std::max(ans, querry(mid + 1, r, 2 * nod + 1, std::max(mid + 1, il), ir));
        }
        return ans;
    }
}
 
void update(int l, int r, int nod, int poz, int val) {
    if (l == r) {
        aint[nod] = val;
    }
    else {
        int mid = (l + r) / 2;
        if (poz <= mid) {
            update(l, mid, 2 * nod, poz, val);
        }
        else {
            update(mid + 1, r, 2 * nod + 1, poz, val);;
        }
        aint[nod] = std::max(aint[2 * nod], aint[2 * nod + 1]);
    }
}
 
int main()
{
    std::ifstream fin("arbint.in");
    std::ofstream fout("arbint.out");
    int nrn, nrm, nri, cer, l, r, poz, val;
    fin >> nrn >> nrm;
    for (int index = 1; index <= nrn; index++) {
        fin >> nri;
        update(1, nrn, 1, index, nri);
    }
    for (int index = 0; index < nrm; index++) {
        fin >> cer;
        if (cer) {
            fin >> poz >> val;
            update(1, nrn, 1, poz, val);
        }
        else {
            fin >> l >> r;
            fout << querry(1, nrn, 1, l, r) << std::endl;
        }
    }
}