前缀和作为基础算法,分为
前缀和的特点:快速查询区间O(1)
其中,一维前缀和可以分为
一维前缀和
1.对前缀和优化
在计算前缀和的时候,时间复杂度一般是O(N)
但是有些情况下,不仅仅是计算前缀和,还需要一些其他的需求,时间复杂度可能是O(N^2)的,这时候就要对前缀和进行优化
优化可能涉及到剪枝,维护一个值,或者某一个公共的性质
典型的题目就是最大子段和(维护值)
简单数学 1230. K倍区间(组合数学,前缀和)
P2671 [NOIP2015 普及组] 求和(简单数学,前缀和)
2.用前缀和来优化
平常求前缀和的时间复杂度是O(n),n表示区间的长度
在数据范围很大的时候,我们需要用前缀和来优化,前缀和会导致求一段区间和的时间复杂度变成O(1)
二维前缀和
二维前缀和主要是用来求一个最大的矩形区间和
要注意的是 一个数组值a[x][y]表示的是一个数组值,而不是一个点
如图,是坐标(2,3)的一个区间表示a[2][3],而不是红色的点表示(2,3)
如果要在数组中找一个边长为NxM的最大矩形,要注意最坏的情况下,查找的是一个小的区间,只包含他本身
所以假如我们要寻找(1,1)~(2,2)的矩形长度,是图1
![]()
图1 图2
而不是图2
如果给定了RxC的一个矩形,要我们找出最大的NxM的小区间,它的区间和最大
也就是求左上角点(x1,y1)~右下角点(x2,y2)围成的最大区间和
假如N,M均为1,那么图1才是我们想要的答案,怎么办呢?
原本的query是
改为
简单可证,通过两个+1,就可以达到图2的效果了
做题的时候要看清楚要求
给定区间长度,求最大区间和 99. 激光炸弹(前缀和)_qq12323qweeqwe的博客-CSDN博客