noip数据结构与算法 之 基础小算法 二维前缀和维护

noip数据结构与算法 之 基础小算法 二维前缀和维护

相信来看二维前缀和维护的各位一定是对一维前缀和维护问题有足够的了解了,那么二维的前缀和维护实际上是在一维前缀和维护的基础上的升级,把一个数列升级成了矩阵,但是思想是一样的,具体问题如下:

问题描述:
已知n*n的矩阵a,有m次询问,每次询问给定 x 1 , y 1 , x 2 , y 2 x_1,y_1,x_2,y_2 x1,y1,x2,y2四个数,求以 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)为左上角坐标和 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)为右下角坐标的子矩阵的所有元素和。注意仍然包含左上角和右下角的元素。
输入数据:
第一行n和m,接下来一行有n行,每行n个数,表示矩阵a,接下来有m行,每行有四个数 x 1 , y 1 , x 2 , y 2 x_1,y_1,x_2,y_2 x1,y1,x2,y2,详细解释参考问题描述。
输出数据:
m行,每行一个求和解。
输入样例:
5 2
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
2 2 4 4
3 3 5 5
输出样例:
117
171
数据范围:
0 &lt; N ≤ 1000 ; 0 &lt; M ≤ 100000 0 \lt N \le 1000;0 \lt M \le 100000 0<N10000<M100000
a i , j a_{i,j} ai,j是int范围内的任意整数

我们肯定能够想到,如果单纯的使用暴力解决这个问题是 O ( m n 2 ) O(mn^2) O(mn2)的做法,对于这个题的数据范围是绝对超时的。所以我们也能想到是使用了一个类似于一维前缀和维护的优化方法的优化方式。但那是什么?当我们转换成为矩阵的时候,前n项和的做法就不行了。

但我们还有一个东西叫做容斥定理。容斥定理是关于集合的一个定理。这个定理是小学奥数内容,而且我们在高中课程中学习集合的时候已经了解过了,但你或许不知道这个名字。

在小学奥数中,容斥定理被描述的极其简单,如果我有n个抽屉,有m个苹果,我往抽屉里面放苹果,保证每个抽屉都有苹果的情况下,如果 k n &lt; m kn \lt m kn<m,那么必定会有一个抽屉有至少k+1个苹果。

当然,在我们学习过集合之后,容斥定理就可以这样来描述:

设有A,B,C三个集合,这三个集合相互均有交集,并且三个集合之间也有交集。则这三个集合的并集可以表示为:

A ∪ B ∪ C = A + B + C − A ∩ B − B ∩ C − A ∩ C + A ∩ B ∩ C A \cup B \cup C=A+B+C-A \cap B-B \cap C-A \cap C+A \cap B \cap C ABC=A+B+CABBCAC+ABC

我们使用文氏图可以得到一个更直观的解释:

文氏图

相信数学好的同学已经通过图看出来这个公式了,用更通俗易懂的道理来解释,三个集合,首先直接相加,发现 A ∩ B A \cap B AB B ∩ C B \cap C B

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值