核心改法:先做标准 LIS 分层,只在“能位于某条 LIS 上”的位置里连边,然后在相邻层之间用“值严格递增 + 位置可衔接”的条件建图,最后在“值节点”上做 DP,并且在每一层对相同数值合并(去重)。
具体步骤:
计算每个位置 i 的
L[i]:以 a[i] 结尾的 LIS 长度(从左到右、值严格小于)。在登山路线规划中,我们记录沿途关键点的海拔。给定一个长度为 n 的海拔序列 h1,h2,…,hn,一条“登山轨迹”是选择若干个位置 i1<i2<⋯<ik,使得这些位置的海拔严格递增,即 hi1<hi2<⋯<hik。轨迹的“形态”定义为所选位置的海拔值序列 (hi1,hi2,…,hik)。两条轨迹形态相同,当且仅当长度相同且对应位置上的海拔值全部相等(即使选择的位置不同,只要海拔值序列相同,也视为同一种形态)。请计算所有长度最大的登山轨迹共有多少种不同的形态,答案对 998244353 取模。
数据范围:T 不超过 10^4;每个测试数据中 n 不超过 2*10^5;同一个输入文件中所有测试数据的 n 之和不超过 2*10^5;每个 hi 是介于 1 和 10^9 之间的整数。
第一行包含一个整数 T,表示测试数据组数。对于每组测试数据:第一行包含一个整数 n,表示序列长度;第二行包含 n 个整数 h1,h2,…,hn,表示海拔序列。保证单个输入文件内所有测试数据的 n 之和不超过 2*10^5。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册