Cod sursa(job #2816832)

Utilizator KPP17Popescu Paul KPP17 Data 12 decembrie 2021 11:53:55
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#define mF "arbint"
std::ifstream in(mF ".in");
std::ofstream out(mF ".out");
int V[400000], n, a, b; struct P {int i = 0, j = n, k = 1;
P A() {return {i, i+j>>1, k<<1};} P B() {return {i+j>>1, j, (k<<1)+1};}
int& V() {return ::V[k];} bool I() {return i != j-1;}
void F() {V() = std::max(A().V(), B().V());}
bool J(int p) {return i <= p and p < j;}};
void A(P p = {}) {if (p.I()) A(p.A()), A(p.B()), p.F(); else in >> p.V();}
void B(P p = {}) {if (p.I()) p.A().J(a)? B(p.A()): B(p.B()), p.F(); else p.V() = b;}
int C(P p = {})
{
    return P{a, b}.J(p.i) and P{a, b}.J(p.j-1)? p.V():
    p.I() and (p.J(a) or p.J(b-1))? std::max(C(p.A()), C(p.B())): 0;
}
int main()
{
    int q; in >> n >> q; A(); for (bool c; q--;) {in >> c >> a >> b, a--;
    if (c) B(); else out << C() << '\n';}
}