codeforces 493 div1 e

题解:

和这件zhcs的那题有点像

第一种做法是考虑i,i+1之间的贡献

这样子就是矩形加减然后求矩形最小值个数

另一种做法是我们从左向右维护mx-nx-r+l

跟之前那题一样我们知道这个的最小值为0

另外我们只需要从右向左维护一个单调队列,这样区间取min/max(每个数插入删除一次)

就可以变成分段区间+/-操作了

然后这样就变成区间+/-然后查询历史为0的个数

其实这等价于上一种+扫描线

之后这个地方非常套路。。刚开始并没有理解

首先每个点肯定要维护最小值以及最小值个数

我们对每个点再维护一个时间标记,表示这个点是0的时间

注意我们不能去记录这个时间节点是多少

因为这样标记无法合并,我们在区间修改了一个节点后,我们不能即时的对子区间进行修改

然后下一个标记打下来就出错了

我们去记录每个点为0的时间,并且在父亲方向上可以打增加时间的标记

如何在增加了标记之后下传呢

我们考虑这个点以上的标记影响的都是这整个区间

这个区间之前最小值为0的位置,现在也一定是最小值

所以我们判一下它和父亲最小值是否相同就可以了

代码:

猜你喜欢

转载自www.cnblogs.com/yinwuxiao/p/10089035.html