#NC2506F. 随机线段树

随机线段树

题目描述

定义一个随机线段树为一个二叉树,其中每个节点表示一个闭区间 [l,r][l,r]

  • 如果 l=r l = r ,则该节点为叶子节点。
  • 如果 l<r l < r 且区间的长度 (rl+1)(r - l + 1) 是偶数:设 x=(l+r)/2 x = \lfloor (l + r)/2 \rfloor 。节点的左子节点表示 [l,x][l,x],右子节点表示 [x+1,r][x+1,r]
  • 如果 l<r l < r 且区间的长度 (rl+1)(r - l + 1) 是奇数:设 x=(l+r)/2 x = (l + r)/2 。以 1/2 1/2 的概率,左子节点表示 [l,x][l,x],右子节点表示 [x+1,r][x+1,r];以 1/2 1/2 的概率,左子节点表示 [l,x1][l,x-1],右子节点表示 [x,r][x,r]

给定一个线段树,定义 cost(x,y)\text{cost}(x,y) 如下: 在查询区间 [x,y][x,y] 时,从根节点开始,设当前在节点 [l,r][l,r],过程如下:

  • 如果 [x,y][x,y] 包含 [l,r][l,r],查询结束。
  • 否则,如果左儿子节点与 [x,y][x,y] 相交,则查询左儿子节点;如果右儿子节点与 [x,y][x,y] 相交,则查询右儿子节点。
  • cost(x,y)\text{cost}(x,y) 的值是查询过程中访问的节点数量。

给定 nn,考虑一个随机线段树,其根节点表示 [1,n][1,n]。对于 1i2n1 \leq i \leq 2 \cdot n,计算 cost(x,y)\text{cost}(x,y) 等于 ii 的区间 [x,y][x,y] 的期望数量,结果对 998244353998244353 取模。

输入格式

第一行包含一个整数 nn (1n1051 \leq n \leq 10^5)。

输出格式

输出 2n2 \cdot n 行。每行包含一个整数,表示答案对 998244353998244353 取模。

3
1
2
2
1
0
0
4
1
2
4
2
1
0
0
0
5
1
2
4
4
499122179
1
499122177
0
0
0