Square Root Techniques
- 对于 \(n\) 个数 \(a_i\),\(\sum a_i=m\) 那么不同 \(a_i\) 的个数只有 \(O(\sqrt{m})\) 种。
- 对于一张边数为 \(m\) 的图,度数 \(\geq \sqrt{m}\) 的点只有 \(O(\sqrt{m})\) 个。
- 将序列按照 \(B\) 长度进行分块,那么区间查询会查询 \(O(\frac{n}{B})\) 个整块,会查询 \(O(B)\) 个散点。
- 莫队,首先按照左端点所在块编号排序,其次按照右端点排序,达到 \(n\sqrt(n)\)。
- 带修改莫队,首先按照左端点所在块编号排序,其次按照右端点所在块编号排序,最后按照时间排序,达到 \(n^{\frac{5}{3}}\)。
- 回滚莫队,在只适合删除或者插入的时候,在左端点进行回滚,做完一个询问就撤销,右端点的修改则保留。
- 定期重构,统一处理 \(B\) 个询问,做完之后重构数据结构,重构的次数只有 \(\frac{n}{B}\) 次。
- BSGS算法,求解离散对数。
- 光速幂,对于固定 \(a,p\),询问 \(a^b \mod p\) 的问题,对于 \(0\leq i \leq \sqrt{p}\) 处理 \(a^i,a^{i\sqrt{p}}\)。
References
https://codeforces.com/blog/entry/96713