线段树:区间分段管理,层层归并上报。(和归并算法和区间DP有点像)
线段树的逻辑结构:每个叶子节点是元素的状态,非叶子节点是区间的状态。
线段树的存储结构:
数组存储线段树,约束左右子节点的存储位置(pos是当前节点的索引)
leftPos = 2 * pos + 1
rightPos = 2 * pos + 2
覆盖范围
左子节点:[left, (left + right)/2]
右子节点:[(left + right)/ 2 + 1, right]
线段树的操作,update/query
update:递归更新到子节点,递归完成后更新当前节点
query:递归到子区间,完成后归并
线段树update的lazy化,在query的时候再更新
博弈类问题,dp表示当前操作者的最佳结果。
做出选择,观察下个玩家的最佳结果,采取最有利于自己的选择。
中位数应用,求解
质数筛(因数分解)
整数和质数都可以压缩数据空间,可以用来枚举
逆元
表达式整理,变形,数形结合
快速幂
均值不等式
不等式
公式整理套路:
a.等号左右拼凑不同元素。
b.除号左右拼凑不同元素
c.除号上下拼凑不同元素
所有子串的遍历操作,固定第一个字符,不断向后扩展长度
编程解决几何问题
图中n个点,最少的联通所有点的边数n-1
边的最多n^2数量级
元素聚集成孤岛,孤岛整体处理
使用多个treeset维持大小固定的有序集合
动态维护有序元素集合,集合里面的元素有变化时要重新排序,利用平衡树更加高效
抓住特征点。
如何判断特征点最优?
假设特征点不是最有,那么存在一个更优的序列。
证明特征点能达成不比该序列差的效果。
计数模型,抽象自序号模型
贡献元素模型
可信路径搜索
常用的路径搜索影响因素:当前位置,剩余操作约束,已检索路径。
解决问题Q,最少需要多少资源。 反过来思考 :假设有X资源可以解决什么样的问题。
人类倾向于思考A导致什么样的结果。A可以做什么样的事。不擅长思考已经发生了B,什么会导致B。要做成B,需要什么条件?