因为上一篇博客园渲染变卡了
2.4
简单地差分一下dfs统计就好了。
P4041 [AHOI2014/JSOI2014]奇怪的计算器
比较有意思的题。如果把所有 \(x\) 排序一起全体操作会发现,这些操作不会改变 \(x\) 之间的相对大小关系,同时也就有,每次操作后可能会超过值域范围限制的是左右的某两个区间。所以我们发现只要对 \(x\) 排序后维护区间操作。
具体地,我们需要维护区间最大值和区间最小值,用于判断值域范围限制和求最终单点答案。
同时我们需要支持的操作有区间加,区间乘,区间加特殊值(操作4),以及区间覆盖(值域限制)。
现在我们维护一个特殊的函数 \(f(k1,k2,k3)\),也就是区间维护三个 lazy tag,\(x=x\times k1+a[t]\times k2+k3\)(其中的 \(a[t]\) 是以 \(a[l]\) 和 \(a[r]\) 对应 \(minn\) 和 \(maxn\) 的修改。)这个函数支持我们上述四种操作。
区间加就是 \(f(1,0,a)\),区间乘就是 \(f(a,0,0)\),区间加特殊值就是 \(f(1,a,0)\),区间覆盖就是 \(f(0,0,a)\)。
然后下传标记时注意下儿子标记的变化,以及注意把没有打 lazy tag 的 \(k1,k2,k3\) 分别令为 \(1,0,0\) 可以避免一些不必要的麻烦。