从不浪费——分治总结

从不浪费——分治总结

充分利用题目的性质,充分利用已知的信息,就是分治降低时间复杂度的保证。

序列上的纯粹分治

  • 例一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)

原文地址:https://www.cnblogs.com/winlere/p/10360174.html