专栏文章
题解:P5012 水の数列
P5012题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqclq61
- 此快照首次捕获于
- 2025/12/04 02:36 3 个月前
- 此快照最后确认于
- 2025/12/04 02:36 3 个月前
P5012 水の数列
一道很好的数据结构题。
给定长度为 的序列,记 为对于所有的 ,使得这些序列中小于等于 的数恰好被划分为 个序列时,这些序列的长度的平方和除以 所得的数的最大值。
次询问,每次给出 ,试求 。
我们将题意整理成现在这样,意在展示只要求出每一个 ,原题就可以通过维护一个ST表来解决。
观察题目,注意到能取到最大值的 一定为序列中某个值。因为如果 在两值之间,将其调整至较小的那个值,分子不变, 变得更小。
由于 不好遍历求解,所以我们遍历 ,希望对于每一个 求出所有序列长度的平方和。
从而发现如果从小到大考虑每一个 ,已加入序列的数字不会再退出,所以我们可以用并查集维护所有已加入序列的数所在的序列,然后递推求解分子和 。
具体来说,每次加入一个新的 ,无外乎三种情况:
1. 的两侧数都没有加入,此时 。
2. 的一侧数已加入,不妨设为左侧,此时 。
3. 的两侧数已加入,此时 。
的左右两侧区间大小可以在维护并查集时记录在根节点上。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...