核心改法:先做标准 LIS 分层,只在“能位于某条 LIS 上”的位置里连边,然后在相邻层之间用“值严格递增 + 位置可衔接”的条件建图,最后在“值节点”上做 DP,并且在每一层对相同数值合并(去重)。
具体步骤:
计算每个位置 i 的
L[i]:以 a[i] 结尾的 LIS 长度(从左到右、值严格小于)。给定一个长度为n的数组a,请你计算其中所有本质不同最长上升子序列的数量。由于答案可能非常大,请将结果对998244353取模后输出。
**[子序列]**如果一个序列可以通过删除原序列的若干(可能为零)元素得到,则称前者为后者的一个子序列。
**[上升序列]**我们称s为一个上升序列,当且仅当其中任意相邻元素满足si<si+1