枚举
一.比如:找到1-100最大质数
1.先对答案集合
如果范围集合找1-50中的数显然不对的
2.答案成立条件:结合题目的要求
3.尽可能减少枚举的范围,提高效率:枚举50-100的质数
4.选择合适的枚举顺序:
枚举质数,从1-100和从100-1是不一样的
前两种确定答案,后两种提高效率
枚举不一定要顺序循环枚举
二.搜索枚举:DFS BFS
比如:全排列:1-3的所有可能

三.模拟
题目告诉每一步的步骤
按照题目一步一步来,从家到学校到校门,题目咋说,咱们咋走
用算法的话,直接翻墙更近
难点:
题目简单,但是操作可能麻烦
不给直接的操作步骤,需要自己获取
错误分析

练习题
洛谷1003 1328
力扣59
四.前缀和
1.向上取整
整数除法想向上取整 → (被除数 + 除数 - 1)÷ 除数
// -1是为了不被整除,比如30/15=2,这时再加1就错误了
2. 向下取整(C++ 原生就是)
C++ 两个正整数相除,默认就是向下取整:
num = a / b
3.前缀和前提
数组均从下标1开始存储
a[1]--a[n]
前缀和:数据前i项的和

1.一维数组:


2.二维数组
二维数组是:a[1][1]---a[i][j]的矩形区域
2.1二维数组的前提:
数组初始化为0,否则越界,下标必须从1开始
2.2二维前缀和公式
红色区域是蓝色和绿色的公共区域
计算最终结果,必须提前计算这三个数
2.3二维前缀和区间求和公式

二维前缀和求区间和(x,y)到(i,j)的和
高纬度的前缀和采取容斥原理的思想
2.4用法
前缀和一般是用来进行数组的预处理,提高后续操作效率的,多用于求区间和
五.差分

时间复杂度较高
接下来用差分(前缀和的逆运算)
一维公式:
a[1]=sum[1]
a[i]=sum[i]-sum[i-1]
图片是在[L,R]区间变化,a[L]+x时,想要把R后面的数不懂,所以a[R+1]-x

差分区间求值:
当前数组当作前缀和,求差分,差分改变之后,在求一遍前缀和

第二种写法:a[]原数组;b[]差分标记数组,标记a[]的改变量;sum[]:b[]的前缀和数组(a[]的总改变量数组)

二维差分
二位差分数组:
对二位前缀和的逆运算
二位差分数组的区间修改
b[x][y]++
b[x+1][y]--
b[x][y+1]--
b[x+1][y+1]++

二维差分例题
重点
区间增值时,二位差分是如何改变的

