专栏文章

题解:P5012 水の数列

P5012题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqclq61
此快照首次捕获于
2025/12/04 02:36
3 个月前
此快照最后确认于
2025/12/04 02:36
3 个月前
查看原文

P5012 水の数列

然而这么出还是太简单了
upd 2025/2/3 23:04:这题坑太多了,以后再也不乱填非常简单了咕咕咕qwq。
一道很好的数据结构题。

给定长度为 NN 的序列,记 d(x)d(x) 为对于所有的 vv,使得这些序列中小于等于 vv 的数恰好被划分为 xx 个序列时,这些序列的长度的平方和除以 vv 所得的数的最大值。
TT 次询问,每次给出 l,rl,r,试求 maxlird(i)\max_{l \leq i \leq r}d(i)

我们将题意整理成现在这样,意在展示只要求出每一个 d(k),k=1,2,...,kmd(k),k=1,2,...,k_m,原题就可以通过维护一个ST表来解决。
观察题目,注意到能取到最大值的 vv 一定为序列中某个值。因为如果 vv 在两值之间,将其调整至较小的那个值,分子不变,vv 变得更小。
由于 kk 不好遍历求解,所以我们遍历 vv,希望对于每一个 vv 求出所有序列长度的平方和。
从而发现如果从小到大考虑每一个 vv,已加入序列的数字不会再退出,所以我们可以用并查集维护所有已加入序列的数所在的序列,然后递推求解分子和 kk
具体来说,每次加入一个新的 vv,无外乎三种情况:
1.vv 的两侧数都没有加入,此时 kk+1,sumsum+1k\leftarrow k+1,sum\leftarrow sum+1
2.vv 的一侧数已加入,不妨设为左侧,此时 sumsum+(left+1)2left2sum\leftarrow sum+(|left|+1)^2-|left|^2
3.vv 的两侧数已加入,此时 kk1,sumsum+(left+right+1)2left2right2k\leftarrow k-1,sum\leftarrow sum+(|left|+|right|+1)^2-|left|^2-|right|^2
vv 的左右两侧区间大小可以在维护并查集时记录在根节点上

评论

0 条评论,欢迎与作者交流。

正在加载评论...