题意:
建筑物在多长的部分是最高的成为该建筑物的覆盖度。求所有建筑物的覆盖度之和。
链接:
https://vjudge.net/contest/202699#problem/E
题解:
这道题还是挺好想的,也是线段树的一个经典的问题
考虑到可能有连续一段状况是相同的,所以考虑用线段树
考虑一段区间,如果其最大值都小于当前值,则内部所有都小于当前值,反之亦然
所以对于每一段区间维护最大值,最小值
另外有个很重要的地方,被这个坑了一天
********
维护最大值和最小值应该要和查询同步进行
因为显然查询相比单纯的维护最大最小值是要多去访问很多节点的,这时就有机会把本次要更新的点给down了
同时与这一句相对应的是down down中要判断p[x].lazy是否等于0,等于0就不要继续进行下去了
原理:
对于第一种方法来说,对于每个点的标记,很可能是无用的
而对于第二种方法,所有的lazy都是有用的
代码:
改得太乱不贴了