题目大意:大意就是给你一个Nn*m的一个由若干个小正方形组成的大矩形,并将其中的某些黑块涂黑,问有多少个不包含黑块的小矩形,有没有想起来小学数学题数三角形的问题、
在网上看了好多人写的,有的解析太少看不太明白,看了有一位大佬写的才把这个题目思路想明白了
奉上大佬的博客:https://blog.youkuaiyun.com/bbbbswbq/article/details/82354425
自己也是看着大佬的博客一遍学习一边写,也算是过了题目;
借着大佬的博客理一下思路整理出来
总体思路就是枚举每一个单位格子(小正方形),计算当它作为右下角时能构成的子矩形的个数,思想类似于DP,用到了单调栈,单调栈不理解也没关系,依然能看得懂(补一个单调栈的blog:https://blog.youkuaiyun.com/wubaizhe/article/details/70136174)
枚举每一个格子作为右下角,例如(x,y),black[y]表示第 y 行黑块最大行下标,何为最大行下标?这个最大是相对意义上的最大,就是在x行上面(比x小)的黑块的行数最大的那个。
举个栗子:
1 2 3