static long resolve(long value, long lazyValue, STParams p) { var ibgn = p.index * p.segsize; var iend = ibgn + p.segsize; return(lazyValue * (S[iend] - S[ibgn] + mod) % mod); }
static int postpone(bool isLazy, int oldValue, int value, STParams p) { return(isLazy ? oldValue + value : value); }
static Node resolve(Node v, int lazyValue, STParams p) { return(lazyValue % 2 == 1 ? new Node(v.n0 * v.n1 - v.ninv, v.n1, v.n0) : v); }
static Node merge(Node l, Node r, STParams p) { return(new Node(l.ninv + r.ninv + l.n1 * r.n0, l.n0 + r.n0, l.n1 + r.n1)); }
static long merge(long x, long y, STParams p) { return((x + y) % mod); }