(低技术力预警)
有时我们希望对 01 矩阵中,每个全 1 子矩阵做一些统计。
一种通用的方法是单调栈。我们从上到下枚举行,然后考察以该行为底边的所有全 1 子矩阵。利用单调栈,我们可以得到以该行为底边的所有极大子矩阵。
假设对一个高为 h h h、宽为 w w w 的矩形,其权值为 f ( h , w ) f(h, w) f(h,w),那么对一个高为 h h h、宽为 w w w 的极大子矩阵而言,其包含的所有矩形的贡献和为
s u m ( h , w ) = ∑ h ′ = 1 h ∑ w ′ = 1 w ( w − w ′ + 1 ) f ( h ′ , w ′ ) sum(h, w) = \sum_{h'=1}^{h}\sum_{w' = 1}^{w} (w-w'+1)f(h', w') sum(h,w)=h′=1∑hw′=1∑w(w−w′+1)f(h′,w′)
设 g ( h , w ′ ) = ∑ h ′ = 1 h f ( h ′ , w ′ ) g(h, w') = \sum_{h'=1}^{h}f(h', w') g(h,w′)=∑h′=1hf(h′,w′),有