Cod sursa(job #2816916)

Utilizator KPP17Popescu Paul KPP17 Data 12 decembrie 2021 14:38:44
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#define mF "datorii"
std::ifstream in(mF ".in");
std::ofstream out(mF ".out");
int V[45000], n, b, c;
struct X {int i = 0, j = n, k = 1;
X A() {return {i, i+j>>1, k<<1};}
X B() {return {i+j>>1, j, (k<<1)+1};}
int& V() {return ::V[k];}
bool I() {return i != j-1;}
bool J(int p) {return i <= p and p < j;}
void F() {V() = A().V() + B().V();}};
void A(X e = {})
{
    if (e.I()) A(e.A()), A(e.B()), e.F();
    else in >> e.V();
}
int B(X e = {})
{
    return X{b, c}.J(e.i) and X{b, c}.J(e.j-1)? e.V():
        e.I() and (e.J(b) or e.J(c-1))?
        B(e.A()) + B(e.B()): 0;
}
void C(X e = {})
{
    if (e.I()) e.A().J(b)? C(e.A()): C(e.B());
    e.V() -= c;
}
int main()
{
    int m; in >> n >> m; A(); while (m--)
    {
        bool a; in >> a >> b >> c; b--;
        if (a) out << B() << '\n'; else C();
    }
}