信息
最基础的信息之一:区间和
\(sum = l.sum + r.sum\)
最基础的信息之一:区间大小
\(sz = l.sz + r.sz\)
最基础的信息之一:区间最值
\(minv = min(l.minv, r.minv)\)
普通信息:最值个数
if (l.minv < r.minv) minvcnt = l.minvcnt;
else if (r.minv < l.minv) minvcnt = r.minvcnt;
else minvcnt = l.minvcnt + r.minvcnt; // 左侧,右侧,越过分治线
普通信息:最大前缀和 maximum presegment sum
mxpresum = max(l.mxpresum, l.sum + r.mxpresum);
稍复杂信息:最大子段和 maximum subsegment sum
mxss = max({l.mxss, r.mxss, l.mxsufsum + r.mxpresum}); // 左侧,右侧,越过分治线
修改
区间加值
i.sum = i.sum + i.sz * add;
i.add = i.add + add;
区间赋值
维护 \(sum \times mul + add\) 。
可以同时维护区间乘 \((mul, 0)\)、加 \((1, add)\) 、赋值 \((0, add)\) 。
标记利用 \((x \times mul_1 + add_1) \times mul_2 + add_2 = x \times mul_1 \times mul_2 + add_1 \times mul_2 + add_2\) 维护。
i.sum = i.sum * mul + add;
i.mul = i.mul * mul;
i.add = i.add * mul + add;
区间整除/开方
利用势能
标签:minvcnt,sum,times,修改,add,mul,树上,线段,minv From: https://www.cnblogs.com/zsxuan/p/18299628