#CF1988F. Heartbeat

Heartbeat

CF1988F Heartbeat

题目描述

对于一个数组 u1,u2,,unu_1, u_2, \ldots, u_n,定义如下:

  • 前缀最大值:如果下标 ii 满足 ui>uju_i > u_j 对于所有 j<ij < i,则称 ii 是一个前缀最大值;
  • 后缀最大值:如果下标 ii 满足 ui>uju_i > u_j 对于所有 j>ij > i,则称 ii 是一个后缀最大值;
  • 上升点:如果下标 iii>1i > 1)满足 ui>ui1u_i > u_{i-1},则称 ii 是一个上升点。

你会得到三个代价数组:[a1,a2,,an][a_1, a_2, \ldots, a_n][b1,b2,,bn][b_1, b_2, \ldots, b_n],以及 [c0,c1,,cn1][c_0, c_1, \ldots, c_{n-1}]

定义一个数组的代价为 axbycza_x \cdot b_y \cdot c_z,其中 xx 是前缀最大值的个数,yy 是后缀最大值的个数,zz 是上升点的个数。

f(n)f(n)1,2,,n1,2,\ldots,n 的所有排列的代价之和。请你求出 f(1),f(2),,f(n)f(1), f(2), \ldots, f(n),并对 998244353998\,244\,353 取模。

输入格式

第一行包含一个整数 nn1n7001 \le n \le 700)。

第二行包含 nn 个整数 a1,,ana_1, \ldots, a_n0ai<9982443530 \le a_i < 998\,244\,353)。

第三行包含 nn 个整数 b1,,bnb_1, \ldots, b_n0bi<9982443530 \le b_i < 998\,244\,353)。

第四行包含 nn 个整数 c0,,cn1c_0, \ldots, c_{n-1}0ci<9982443530 \le c_i < 998\,244\,353)。

输出格式

输出 nn 个整数,第 ii 个数表示 f(i)f(i)998244353998\,244\,353 取模的结果。

输入输出样例 #1

输入 #1

3
1 1 1
1 1 1
1 1 1

输出 #1

1 2 6

输入输出样例 #2

输入 #2

3
1 2 3
2 3 1
3 1 2

输出 #2

6 13 34

输入输出样例 #3

输入 #3

5
1 4 2 5 3
2 5 1 3 4
300000000 100000000 500000000 400000000 200000000

输出 #3

600000000 303511294 612289529 324650937 947905622

说明/提示

在第二个样例中:

  • 考虑排列 [1,2,3][1,2,3]。下标 1,2,31,2,3 都是前缀最大值。下标 33 是唯一的后缀最大值。下标 2,32,3 是上升点。因此,该排列的代价为 a3b1c2=12a_3 b_1 c_2 = 12
  • 排列 [1,3,2][1,3,2]22 个前缀最大值,22 个后缀最大值,11 个上升点。其代价为 66
  • 排列 [2,1,3][2,1,3]22 个前缀最大值,11 个后缀最大值,11 个上升点。其代价为 44
  • 排列 [2,3,1][2,3,1]22 个前缀最大值,22 个后缀最大值,11 个上升点。其代价为 66
  • 排列 [3,1,2][3,1,2]11 个前缀最大值,22 个后缀最大值,11 个上升点。其代价为 33
  • 排列 [3,2,1][3,2,1]11 个前缀最大值,33 个后缀最大值,00 个上升点。其代价为 33

所有排列的代价之和为 3434,因此 f(3)=34f(3) = 34

由 ChatGPT 4.1 翻译