BZOJ2727: [HNOI2012]双十字-树状数组
传送门 给定一个 R C R C 的01 矩阵,要求计算出这个 01 矩阵中有多少个双十字。 双十字由两条水平的和一条竖直的“1”线段组成,要求满足以下几个限制: 1.两条水平的线段不能在相邻的两行。 2.竖直线段上端必须严格高于两条水平线段,下端必须严格低于两条水平线段。 3.竖直线段必须将两条水平线段严格划分成相等的两半。 4.上方的水平线段必须严格短于下方的水平线段。 输出双十字的个数 mod 1,000,000,009 的值。 R , C , N ≤ 10000 , R C ≤ 1000000 R , C , N ≤ 10000 , R C ≤ 1000000 Solution: l r [ i ] l r [ i ] 表示从i开始表示最多能左右延伸多少 d o w n [ i ] d o w n [ i ] 表示从i开始最多往下延伸多少 top[i]表示从i开始最多往上延伸多少 我们考虑枚举下端线段的中点j,然后对于每个上端线段的中点i,对答案的贡献有 ∑ l r [ j ] l e n = 1 m i n ( l e n 1 , l r [ i ] ) t o p [ i ] d o w n [ j ] ∑ l e n = 1 l r [ j ] m i n ( l e n 1 , l r [ i ] ) t o p [ i ] d o w n [ j ]