一、题目
二、解法
正难则反,求至少包含一个黑格子就等于全部减去不包含黑格子的方案数。
考虑单调栈,对于每一行,求出每一个点最长上升,不碰到黑格子的距离,得到一个数组,本题的一个重要条件是数据随机
,我们对数组建立,其中下标作为减值,作为修正值,这样建出来的数满足根节点的最小,而且由于随机,能够保证复杂度是。
考虑每个点的贡献,就是在中的:,求和即可。
怎么理解上式呢?请看下图:
就比如这样的一颗局部,我们的根通过上式处理了红色部分的贡献,具体表现为固定轴下限,在高度差中随意选取轴上限,左边和右边都在管辖范围(一定比它大)中乱选(也就是),体现为等差数列求和,那我们每一个高度都不重不漏的统计,那么一直归纳到最后,就可以发现这种做法的正确性,所以当行的答案我们解决了。
将改行转移到下一行,每一个,如果遇到了黑色点那就清零,时间复杂度。
没有代码,需要填坑
来源:CSDN
作者:C202044zxy
链接:https://blog.csdn.net/C202044zxy/article/details/104055681