#B. 线段树覆盖区间计数

    Type: Default 1000ms 256MiB

线段树覆盖区间计数

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

线段树覆盖区间计数

题目描述

线段树是一种非常常见的数据结构,一棵下标属于整数区间 [1,n][1, n] 的线段树可以这么构造:

  • 初始线段树只有一个结点 [1,n][1, n]
  • 对于结点 [L,R][L, R],若 L<RL < R,则令 mid=[L+R2]mid = \left[ \frac{L + R}{2} \right][x][x] 表示不超过 xx 的最大整数),则这个结点有两个子结点 [L,mid][L, mid][mid+1,R][mid + 1, R]

对一个区间[a,b][a,b],定义f([a,b])f([a,b])为要不重不漏地覆盖区间[a,b][a,b],需要使用的线段树结点的最小数量。现在对[1,n][1,n]内的所有区间[a,b][a,b],求f([a,b])f([a,b])之和,即1abnf([a,b])\sum_{1\le a \le b\le n} f([a,b])。有TT组询问,由于结果可能很大,请输出答案模998244353998244353的结果。

输入格式

第一行一个正整数 TT 表示数据组数。 接下来 TT 行,其中第 ii 行一个正整数 nn 表示第 ii 组数据。

输出格式

TT 行,第 ii 行一个整数表示第 ii 组数据的答案模998244353998244353的结果。

样例 #1

样例输入 #1

1
3

样例输出 #1

7

提示

样例解释 #1

$f([1, 1]) = f([2,2]) = f([3,3]) = f([1,2]) = f([1,3]) = 1$,f([2,3])=2f([2, 3]) = 2,故总和为 77

数据范围

20%20\%的数据,1T101\le T\le 101n10001\le n\le 1000

60%60\%的数据,1T1001\le T\le 1001n1051\le n\le 10^5

100%100\%的数据,1T10001 \le T \le 10001n10181 \le n \le {10}^{18}

2023上学期初二竞赛组期末考

Not Attended
Status
Done
Rule
OI
Problem
3
Start at
2023-12-29 8:50
End at
2023-12-29 12:11
Duration
3.4 hour(s)
Host
Partic.
19