Cod sursa(job #2712446)

Utilizator George_CristianGeorge Dan-Cristian George_Cristian Data 25 februarie 2021 19:24:20
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int n, m, poz, val, vec[400005], stq, drq;

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

int query(int st, int dr, int i) {
    if (st == dr)
        return vec[i];
    if (stq <= st && dr <= drq)
        return vec[i];
    int mij = (st + dr) / 2, rez = 0;
    if (stq <= mij)
        rez = query(st, mij, 2 * i);
    if (drq > mij)
        rez = max(rez, query(mij + 1, dr, 2 * i + 1));
    return rez;
}

void prelucrare() {
    int tip;
    for (int i = 0; i < m; ++i) {
        f >> tip;
        if (tip) {
            f >> poz >> val;
            update(1, n, 1);
        } else {
            f >> stq >> drq;
            g << query(1, n, 1) << '\n';
        }
    }
}

void citire() {
    f >> n >> m;
    for (int i = 1; i <= n; ++i) {
        poz = i;
        f >> val;
        update(1, n, 1);
    }
}

int main() {
    citire();
    prelucrare();
    return 0;
}