洛谷-P8211
Tag:根号分治,分块,并查集
如果用暴力思想,肯定是直接模拟该过程,不妨具体分析情况:
- 当 \(d\) 很大时,最多会进行 \(\frac{V}{d}\) 次搬砖就会全部搬完或变成第二种情况,复杂度 \(O(\frac{V}{d})\)。
- 当 \(d\) 较小时,每次搬砖 \(d\) 会减 \(\ge 0\)。发现这种暴力无法快速处理有 \(b=0\) 的情况,但是这启发我们采用 阈值分治。
记阈值为 \(B\),\(d>B\) 时可直接暴力枚举,快速查询区间和,单点加,为平衡复杂度不妨采用分块,复杂度 \(O(\frac{V^2}{B}+TB)\)
\(d\le B\) 时,此时需要实现快速查找第一个 \(b>0\) 的位置。不妨使用并查集!借用白雪皑皑的处理方法,可以在 \(O(VB)\) 时间内快速预处理出并查集序列,查询可以近似为 \(O(1)\)。
这里题目中要求每次进行整体减 \(d\) 操作时必须有一个 \(\le 0\),所以在修改时如果与下一个距离超过 \(d\) 直接停止即可。

浙公网安备 33010602011771号