#P7122. Chino 与线段树

    ID: 4561 远端评测题 2000ms 500MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>高精度2020O2优化快速傅里叶变换 FFT快速数论变换 NTT

Chino 与线段树

题目描述

Chino 刚学习了一种叫做线段树的数据结构。可是她在写线段树时遇到了一个问题:她不知道该使用多大的空间,只知道线段树的叶子结点个数 nn 为一个在范围 [a,b][a,b] 之内的正整数。

Chino 设 f(n)f(n) 表示一棵 nn 个叶子结点的线段树所占的最大数组下标。她觉得如果她知道了

n=abf(n)\sum_{n=a}^{b}f(n)

那么她就能够算出她需要多少使用多大的空间。所以她来请教聪明的你来帮帮她。

具体地,Chino 构建线段树的伪代码如下:

$$\def\b#1{\textbf{#1}}\def\t#1{\text{#1}}\def\s\qquad\def\P{\mathbb P}\def\l{\underline{\kern{300pt}}}\def\m#1{#1&\,} \def\if#1{\b{if }#1\b{ then}}\def\endfunc{\b{end function}.}\def\endif{\b{end if}.}\def\func{\b{function}}\def\return{\b{return}} \begin{aligned}&\l\\&\b{Function: }\t{Build a Segment Tree.}\\[-10pt]&\l\\[-5pt]&\begin{array}{r|l}\\[-9pt] \m1\func\ \t{BuildSegmentTree}\left(x,l,r\right):\\ \m2\s\if{\left(l\ne r\right)}:\\ \m3\s\s m\gets\left\lfloor\left(l+r\right)/2\right\rfloor.\\ \m4\s\s\t{BuildSegmentTree}\left(2x,l,m\right).\\ \m5\s\s\t{BuildSegmentTree}\left(2x+1,m+1,r\right).\\ \m6\s\endif\\ \m7\endfunc\\[-10pt]\\\end{array}\\[-13pt]&\l\end{aligned} $$

线段树所占的最大数组下标即为在 $\def\t#1{\text{#1}}\t{BuildSegmentTree}\left(1,1,n\right)$ 后所有调用的 BuildSegmentTree\def\t#1{\text{#1}}\t{BuildSegmentTree} 中参数 xx 的最大值。

输入格式

输入共二行。

第一行为一个正整数 aa;第二行为一个正整数 bb。其意义如题面所述。

输出格式

输出一行一个正整数,表示你的答案。

1
10

108

233333
666666

588544964910

1
1000000000000000000

1419691012023749904603586777179575510

提示

样例解释 #1

1101\sim 10 个叶子结点的线段树的最大下标分别为 1,3,5,7,9,13,13,15,17,251,3,5,7,9,13,13,15,17,25,求和得到 108108

测试点约束

本题采用捆绑测试。

对于全部数据,有 1ab101061\le a\le b\le10^{10^6}

每个子任务的具体限制见下表:

子任务编号 分值 bb\le a=ba=b
1 10 1010010^{10^0} ×\times
2 1010110^{10^1}
3 1010210^{10^2}
4 1010310^{10^3} \surd
5 ×\times
6 1010410^{10^4} \surd
7 ×\times
8 1010510^{10^5} \surd
9 ×\times
10 1010610^{10^6}