1 条题解
-
0
自动搬运
来自洛谷,原作者为

Daniel13265
**搬运于
2025-08-24 22:26:50,当前版本为作者最后更新于2020-11-28 16:11:03,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
设 表示一棵 个叶子结点的线段树的深度,那么有 与
$$\begin{aligned} d\left(2n\right)&=d\left(n\right)+1,\\ d\left(2n+1\right)&=\max\left\{d\left(n+1\right),d\left(n\right)\right\}+1. \end{aligned} $$所以
我们又有
$$\begin{aligned} f\left(2n\right)&=2^{d\left(n\right)+1}+f\left(n\right),\\ f\left(2n+1\right)&=\begin{cases} 2^{d\left(n\right)}+f\left(n+1\right), &d\left(n+1\right)>d\left(n\right),\\ 2^{d\left(n\right)+1}+f\left(n\right), &d\left(n+1\right)\le d\left(n\right). \end{cases} \end{aligned} $$按 的二进制位从高位向低位递推。发现 当且仅当 ,因此 最高 位后的全 段这一部分的答案可以直接计算,之后的 位就一定是第二种情况,于是第一段全 位后的 位就与 位一样了。
有了这点,我们就容易发现
$$f\left(n\right)=\begin{cases} 2^{x+1}-1, &n=2^x\left(x\in\N\right),\\ 2^{x+2}-2^{x-y+1}+1, &n=2^x+2^y+t\left(x,y\in\N,0\le t<2^y<2^x\right). \end{cases} $$现在我们要对 求和。我们可以分别求出 时的和与 时的和,然后作差得出答案,所以我们现在要对于 和 求
若 ,那么我们单独计算 然后并计算 减去一后的答案,求和就可以得到答案。所以我们假设 ,那么
$$\begin{aligned} \sum_{n=1}^Nf\left(n\right)=&\sum_{x=0}^{X-1}\left(2^{x+1}-1+\sum_{y=0}^{x-1}2^y\left(2^{x+2}-2^{x-y+1}+1\right)\right)+2^{X+1}-1\\ &\qquad+\sum_{y=0}^{Y-1}2^y\left(2^{X+2}-2^{X-y+1}+1\right)+\left(T+1\right)\left(2^{X+2}-2^{X-Y+1}+1\right)\\ =&3\times2^X-2^{X+1}X-2X+\frac{2^{2X+2}-13}3+2^{X+1}-1\\ &\qquad+\left(2^{X+2}+1\right)\left(2^Y-1\right)-Y\times2^{X+1}+\left(T+1\right)\left(2^{X+2}-2^{X-Y+1}+1\right). \end{aligned} $$于是就可以计算了。
你可能需要一个高精度板子。时间复杂度 ,空间复杂度 。人生苦短,我用 Ruby。
- 1
信息
- ID
- 4603
- 时间
- 2000ms
- 内存
- 500MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者