在本题中,一个长度为 k 的 完美阶梯 是指序列 S 中的一个严格递增子序列,且其元素恰好依次为 1,2,…,k。完美阶梯的 高度 就是它的长度 k。题目要求所有完美阶梯的高度之和,结果对 109+7 取模。
问题的核心是统计每种可能的完美阶梯出现了多少次。由于完美阶梯必须是 [1,2,…,k] 的形式,我们可以通过动态规划,只在顺序扫描序列的过程中维护以每个值结尾的“前缀完美阶梯”的数量。
动态规划设计:
dp[x] 表示子序列 [1,2,…,x] 出现的次数(即高度为 x 的完美阶梯的个数)。小艾在研究数字序列时,提出了一种名为“完美阶梯”的子序列概念。对于给定的整数序列 S=[S1,S2,…,Sn],一个子序列是指从 S 中保持原有顺序选取若干个元素得到的序列。我们称一个长度为 k 的子序列为 完美阶梯,当且仅当该子序列严格递增,且其元素恰好依次为 1,2,…,k。定义一个完美阶梯的 高度 就是其长度 k。现在小艾想知道序列 S 的所有子序列中,所有完美阶梯的高度之和是多少。由于答案可能很大,请你输出结果对 109+7 取模的值。
数据范围:测试数据组数 T 不超过 100;每一组中,序列长度 n 不超过 2*10^5;所有测试数据的 n 总和不超过 3*10^5;对于每个元素 Si,都有 1≤Si≤n。
第一行包含一个整数 T(1≤T<100),表示测试数据组数。接下来每组数据包含两行:第一行一个正整数 n(1≤n≤2×105),表示序列长度;第二行包含 n 个整数 S1,S2,…,Sn(1≤Si≤n),表示序列中的元素。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.