1.整数二分的两个模板要背一背
2.二分不是一个从已知推结果的过程,而是一种找结果的过程(枚举答案)
3.前缀和没必要开一个数组存原始数据,就用一个数组就可以,要不容易超内存
4.差分,其主要操作为对于原数组a[],使得a[l~r]中每一个数都加上相同的数c,使原来的遍历过程化简为一个简单操作。其原理为构造差分数组b[],使得a[]为b的前缀和,即a[i]=b[1]+b[2]+b[3]+…+b[i]。
插数操作:
void insert(int l,int r,int c)//在a[l~r]中每个数+c
{
b[l]+=c;
b[r+1]-=c;
}
最后还原a的过程就是对b求个前缀和。不必要按照定义初始化b,可以利用插入操作,相当于在a[i~i]上插入数值a[i]。
二维差分
void insert(int x1,int y1,int x2,int y2,int c)
//注意改变差分矩阵的数值,实际上影响的是源矩阵右下角一大块的值。
//a是b的前缀和矩阵,想定义
{
b[x1][y1]+=c;
b[x2+1][y1]-=c;
b[x1][y2+1]-=c;
b[x2+1][y2+1]+=c;
}
5.快排的模板要记一下(注意边界条件),面试的时候注意时间复杂度等问题的回答