AT_nikkei2019_2_final_h 逆にする関数
题目描述
给定一个由 $1, 2, \dots, m$ 组成的数列 $(v_1, v_2, \dots, v_k)$ 和一个函数 $f\colon \{1, \dots, m\} \to \{1, \dots, m\}$,当 $f$ 满足以下条件时,称 $f$ 能*逆转*数列 $(v_1, v_2, \dots, v_k)$。
- 数列 $(f(v_1), f(v_2), \dots, f(v_k))$ 与原数列反转后的数列 $(v_k, v_{k-1}, \dots, v_1)$ 完全相同。
现给定一个由 $1, 2, \dots, m$ 组成的数列 $(a_1, a_2, \dots, a_n)$。该数列的所有非空连续子序列共有 $\frac{n(n+1)}{2}$ 种。请你统计,对于所有这些连续子序列,能够逆转它们的函数 $f$ 的种数之和,并输出其对 $998244353$ 取模的结果。
输入格式
输入以如下格式从标准输入读入:
> $n$ $m$ $a_1$ $a_2$ $\dots$ $a_n$
输出格式
输出所有连续子序列对应的逆转函数个数之和,对 $998244353$ 取模后的结果。
说明/提示
### 注意
- 对于函数 $f$ 和 $g$,如果存在 $i \in \{1, \dots, m\}$ 使得 $f(i) \neq g(i)$,则认为 $f$ 和 $g$ 是不同的函数。
### 约束条件
- $1 \leq n, m \leq 3 \times 10^5$
- 对于每个 $i=1,2,\dots,n$,有 $1 \leq a_i \leq m$
- 输入均为整数
### 样例解释 1
数列 $(1, 1, 2)$ 的连续子序列有 $(1)$、$(1, 1)$、$(1, 1, 2)$、$(1)$、$(1, 2)$、$(2)$。
- 使 $f$ 能逆转数列 $(1)$ 的充要条件是 $f(1)=1$,此时在 $\{1,2,3\}$ 上的函数共有 $9$ 种。
- 使 $f$ 能逆转数列 $(1, 1)$ 的充要条件是 $f(1)=1$,此时在 $\{1,2,3\}$ 上的函数共有 $9$ 种。
- 使 $f$ 能逆转数列 $(1, 1, 2)$ 的充要条件是 $f(1)=2$ 且 $f(1)=1$ 且 $f(2)=1$,无解。
- 使 $f$ 能逆转数列 $(1, 2)$ 的充要条件是 $f(1)=2$ 且 $f(2)=1$,此时在 $\{1,2,3\}$ 上的函数共有 $3$ 种。
- 使 $f$ 能逆转数列 $(2)$ 的充要条件是 $f(2)=2$,此时在 $\{1,2,3\}$ 上的函数共有 $9$ 种。
因此,答案为 $9 + 9 + 0 + 9 + 3 + 9 = 39$。
### 样例解释 2
请不要忘记对 $998244353$ 取模。
由 ChatGPT 4.1 翻译