CF1603C Extreme Extension
题目描述
对于一个长度为 $n$ 的整数数组 $b$,该数组的极值定义为:将 $b$ 变为非递减数组所需执行下述操作的最小次数(可能为零):
- 选择一个下标 $i$,满足 $1 \le i \le |b|$,其中 $|b|$ 表示当前 $b$ 的长度。
- 将 $b_i$ 替换为两个正整数 $x$ 和 $y$,使得 $x + y = b_i$。
- 这样,数组 $b$ 发生变化,下一次操作在修改后的数组上进行。
例如,若 $b = [2, 4, 3]$,选择第 $2$ 个元素,则操作后可能得到 $[2, \underline{1}, \underline{3}, 3]$、$[2, \underline{2}, \underline{2}, 3]$ 或 $[2, \underline{3}, \underline{1}, 3]$。对于该数组,只需一次操作即可使其变为非递减数组:$[2, 4, 3] \rightarrow [2, \underline{2}, \underline{2}, 3]$。
显然,任意正整数数组都可以通过上述操作变为非递减数组。
YouKn0wWho 有一个长度为 $n$ 的整数数组 $a$。请你帮助他计算 $a$ 的所有非空子数组的极值之和,结果对 $998\,244\,353$ 取模。如果某个子数组在 $a$ 中出现多次,则其极值应按出现次数累加。
数组 $d$ 是数组 $c$ 的一个子数组,如果 $d$ 可以通过删除 $c$ 的若干(可能为零或全部)开头元素和若干(可能为零或全部)结尾元素得到。
输入格式
第一行包含一个整数 $t$($1 \le t \le 10\,000$),表示测试用例的数量。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 10^5$)。
每个测试用例的第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 10^5$)。
保证所有测试用例中 $n$ 的总和不超过 $10^5$。
输出格式
对于每个测试用例,输出一个整数,表示 $a$ 的所有子数组的极值之和,对 $998\,244\,353$ 取模。
说明/提示
设 $f(l, r)$ 表示 $[a_l, a_{l+1}, \ldots, a_r]$ 的极值。
在第一个测试用例中:
- $f(1, 3) = 3$,因为可以对子数组 $[5, 4, 3]$ 执行如下操作(新插入的元素用下划线标记):$[5, 4, 3] \rightarrow [\underline{3}, \underline{2}, 4, 3] \rightarrow [3, 2, \underline{2}, \underline{2}, 3] \rightarrow [\underline{1}, \underline{2}, 2, 2, 2, 3]$;
- $f(1, 2) = 1$,因为 $[5, 4] \rightarrow [\underline{2}, \underline{3}, 4]$;
- $f(2, 3) = 1$,因为 $[4, 3] \rightarrow [\underline{1}, \underline{3}, 3]$;
- $f(1, 1) = f(2, 2) = f(3, 3) = 0$,因为它们本身已是非递减数组。
因此,$a$ 的所有子数组的极值之和为 $3 + 1 + 1 + 0 + 0 + 0 = 5$。
由 ChatGPT 4.1 翻译