题面
依次将 $n$ 个下边界在 $x$ 轴上的矩形涂黑,求每次涂色后总图形的周长。
其中 $1 \le n \le 2 \times 10^5$。
分析
横线部分就是线段覆盖,这是平凡的。
竖线部分,更新操作就是区间取 $\max$,对于线段树节点 $[l,r]$,需要维护 $\sum_{i=l}^{r-1} |a_{i}-a_{i+1}|$。
考虑 Segment Tree Beats,我们在线段树节点维护了区间最小值和区间次小值。当最大值更新为 $x$,$x$ 小于节点次大值,将区间内所有最小值提升为 $x$,可以发现这个过程中改变的是最小值和相邻高点之间的差。因此,我们对于一个线段树节点区间,维护所有相邻的是否是最小值导致间断点,假设我们维护了这样的间断点个数,那么对于区间答案的容易进行更新。
间断点的个数容易维护,首先它可能从左右子树上传得到,然后在考虑将左右区间拼接点的贡献即可。
最后,注意我们区间覆盖最小值时打的标记,也包含了懒标记效果,记得下传信息。注意维护次小值的细节。