从不浪费——分治总结
从不浪费——分治总结
充分利用题目的性质,充分利用已知的信息,就是分治降低时间复杂度的保证。
序列上的纯粹分治
- 例一CJOI2019矩阵级数
- 考虑式子的含义,是不是\(\Sigma^{n} A^i =\Sigma^{\frac{n}{2}}A^i+A^{\frac{n}{2}}\Sigma^{\frac{n}{2}}A^i\)
- 直接递归处理两边即可,时间复杂度\(O(logk)\)
- 例二CJOI2019Paiting Fence
- 考虑上色到最底的那个后,就把问题分成序列上的子问题了。
- 最多"涂到最底"层数是\(logn\)的,每层都要\(O(n)\)就好了。
- 例三CJOI2019Cipher
- 这类感觉像数学题的题目,实际上可以分治。因为数字就是很多别的数的和,而且显然牵涉到数学我们可以用乘法或者次方来优化。甚至倍增。
小小结
我们发现,如果处理了序列的左边,就对序列的右边有帮助的话,可以直接分治,分治的复杂度与分治深度和每次合并的复杂度有关。涉及到数学的问题也可以用这种方法。
平面点分治
考虑到序列可以看做只有\(x\)轴的平面,是不是可以用序列分治类似的办法来解决坐标系的问题呢?
- 例一平面最近点对
- 考虑到左右区间贡献的答案可以帮助我们确定枚举的起点或者终点。
- 考虑到这类问题如果在序列上怎么做
- 例二[CJOI2019Chebnear]
- 和例一是一样的,总是考虑最坏情况做复杂度分析。
然而凉心出题人会把问题出到树上\(\dots \dots\)
博客保留所有权利,谢绝学步园、码迷等不在文首明显处显著标明转载来源的任何个人或组织进行转载!其他文明转载授权且欢迎!