CF1988F Heartbeat

题目描述

对于一个数组 $u_1, u_2, \ldots, u_n$,定义如下: - 前缀最大值:如果下标 $i$ 满足 $u_i > u_j$ 对于所有 $j < i$,则称 $i$ 是一个前缀最大值; - 后缀最大值:如果下标 $i$ 满足 $u_i > u_j$ 对于所有 $j > i$,则称 $i$ 是一个后缀最大值; - 上升点:如果下标 $i$($i > 1$)满足 $u_i > u_{i-1}$,则称 $i$ 是一个上升点。 你会得到三个代价数组:$[a_1, a_2, \ldots, a_n]$,$[b_1, b_2, \ldots, b_n]$,以及 $[c_0, c_1, \ldots, c_{n-1}]$。 定义一个数组的代价为 $a_x \cdot b_y \cdot c_z$,其中 $x$ 是前缀最大值的个数,$y$ 是后缀最大值的个数,$z$ 是上升点的个数。 设 $f(n)$ 为 $1,2,\ldots,n$ 的所有排列的代价之和。请你求出 $f(1), f(2), \ldots, f(n)$,并对 $998\,244\,353$ 取模。

输入格式

第一行包含一个整数 $n$($1 \le n \le 700$)。 第二行包含 $n$ 个整数 $a_1, \ldots, a_n$($0 \le a_i < 998\,244\,353$)。 第三行包含 $n$ 个整数 $b_1, \ldots, b_n$($0 \le b_i < 998\,244\,353$)。 第四行包含 $n$ 个整数 $c_0, \ldots, c_{n-1}$($0 \le c_i < 998\,244\,353$)。

输出格式

输出 $n$ 个整数,第 $i$ 个数表示 $f(i)$ 对 $998\,244\,353$ 取模的结果。

说明/提示

在第二个样例中: - 考虑排列 $[1,2,3]$。下标 $1,2,3$ 都是前缀最大值。下标 $3$ 是唯一的后缀最大值。下标 $2,3$ 是上升点。因此,该排列的代价为 $a_3 b_1 c_2 = 12$。 - 排列 $[1,3,2]$ 有 $2$ 个前缀最大值,$2$ 个后缀最大值,$1$ 个上升点。其代价为 $6$。 - 排列 $[2,1,3]$ 有 $2$ 个前缀最大值,$1$ 个后缀最大值,$1$ 个上升点。其代价为 $4$。 - 排列 $[2,3,1]$ 有 $2$ 个前缀最大值,$2$ 个后缀最大值,$1$ 个上升点。其代价为 $6$。 - 排列 $[3,1,2]$ 有 $1$ 个前缀最大值,$2$ 个后缀最大值,$1$ 个上升点。其代价为 $3$。 - 排列 $[3,2,1]$ 有 $1$ 个前缀最大值,$3$ 个后缀最大值,$0$ 个上升点。其代价为 $3$。 所有排列的代价之和为 $34$,因此 $f(3) = 34$。 由 ChatGPT 4.1 翻译