#P16313. [ICPC 2023 Jinan R] 向未来说你好

[ICPC 2023 Jinan R] 向未来说你好

题目描述

:::epigraph “呃…嗯,我们可以重新开始我们的友谊吗?”

“你什么意思…你是说,重新开始?”

“…” :::

很久很久以前,小青鱼与他最好的朋友小 F\mathcal{F} 一起准备了一场程序设计竞赛。他们准备一共了 nn 道题目,编号为从 11nn 的整数。第 ii 道题目(1in1 \leq i \leq n)有一个难度评级 aia_i

时间过得很快。距离他们举办的比赛已经过去十五个月了。小青鱼已经不再是 Informatics Olympiad 的选手了,而是转型成为了一名教练。但他们曾有过约定,要一起举办一组系列锦标赛。

而小青鱼没有忘掉它。

现在,小青鱼想要把这 nn 道题目分组为若干场训练活动。为了确保题目的题面中包含的故事背景一致,小青鱼想要把这 nn 道题目划分成若干个区间。一个划分题目的方案可以记为一个整数序列 0=r0<r1<r2<<rk=n0 = r_0 < r_1 < r_2 < \cdots < r_k = n,表示共有 kk 场训练活动,其中第 ii 场活动包含所有编号在 (ri1+1)(r_{i - 1} + 1)rir_i 之间(含两端)的题目。

除此以外,小青鱼不想让某一场活动变得太不平衡。如果一场活动中包含一道困难的题目,那么这个活动就应该包含更多的题目。形式化地,如果题目 jj 在第 ii 个活动中(也就是说,ri1<jrir_{i - 1} < j \leq r_i),那么不等式 riri1ajr_i - r_{i - 1} \geq a_j 必须成立。

小青鱼很好奇能够有多少种划分题目的方案可以满足上述所有要求,并把方案数记做 f(a)f(a)。这个问题对他来说很简单,所以小青鱼很轻松地就算出了答案。

在这些活动的前一天,小青鱼突然意识到这些题目对选手来说太困难了。因此,他想到了一道新的简单题目,其难度评级只有 11。他很好奇,对每个 1jn1 \leq j \leq n,如果我们使用如下方式定义序列 a(j)a^{(j)},那么 f(a(j))f(a^{(j)}) 的值是多少。

$$a^{(j)}_i = \begin{cases}1 & i = j \\ a_i & \text{otherwise}\end{cases}$$

因为 f(a(j))f(a^{(j)}) 的值可以非常大,您只需要输出它对 998244353998\,244\,353 取模后的结果。

输入格式

每个测试文件仅有一组测试数据。

第一行输入一个整数 nn1n2×1051 \leq n \leq 2 \times 10^5)表示题目的数量。

第二行输入 nn 个整数 a1,a2,,ana_1, a_2, \cdots, a_n1ain1 \leq a_i \leq n),其中 aia_i 表示第 ii 道题目的难度评级。

输出格式

输出一行 nn 个由单个空格分隔的整数,其中第 ii 个整数表示 f(a(i))f(a^{(i)}) 的值对 998244353998\,244\,353 取模后的结果。

请不要在行末输出多余空格,否则您的答案可能会被认为是错误的!

5
1 3 2 1 2
3 6 3 3 6

提示

在样例数据中,对于 j=1j = 1,我们有 a(j)=[1,3,2,1,2]a^{(j)} = [1, 3, 2, 1, 2]。有 33 种方法将题目分配到活动中,如下所示:

  • [1][1], [3,2,1,2][3, 2, 1, 2]
  • [1,3,2][1, 3, 2], [1,2][1, 2]
  • [1,3,2,1,2][1, 3, 2, 1, 2]

对于 j=2j = 2,我们有 a(j)=[1,1,2,1,2]a^{(j)} = [1, 1, 2, 1, 2]。有 66 种方法将题目分配到活动中,如下所示:

  • [1][1], [1][1], [2,1,2][2, 1, 2]
  • [1][1], [1,2][1, 2], [1,2][1, 2]
  • [1][1], [1,2,1,2][1, 2, 1, 2]
  • [1,1][1, 1], [2,1,2][2, 1, 2]
  • [1,1,2][1, 1, 2], [1,2][1, 2]
  • [1,1,2,1,2][1, 1, 2, 1, 2]

对于 j=3j = 3j=4j = 4,所有的方案与 j=1j = 1 时的方案相同。

对于 j=5j = 5,我们有 a(j)=[1,3,2,1,1]a^{(j)} = [1, 3, 2, 1, 1]。有 66 种方法将题目分配到活动中,如下所示:

  • [1][1], [3,2,1][3, 2, 1], [1][1]
  • [1][1], [3,2,1,1][3, 2, 1, 1]
  • [1,3,2][1, 3, 2], [1][1], [1][1]
  • [1,3,2][1, 3, 2], [1,1][1, 1]
  • [1,3,2,1][1, 3, 2, 1], [1][1]
  • [1,3,2,1,1][1, 3, 2, 1, 1]