题目描述
题目大意
求满足以下条件的长度为 的序列 有多少种:
输入格式
第一行输入 个正整数
后面 行每行 个正整数表示
输出格式
输出满足条件的序列数,对 取模。
输入输出样例 #1
输入 #1
输出 #1
输入输出样例 #2
输入 #2
输出 #2
输入输出样例 #3
输入 #3
1 2 3 4
| 6 40000000 3 1 4 30000000 2 6 20000000 3 5 10000000
|
输出 #3
题解
首先可以使用各种数据结构得出每一个下标对应的值域上界。我们对每一种值域上界所在的位置分别进行 DP。
对于 的一个上界 ,我们显然只关心填的数是不饱和 还是饱和 。
对于一个询问 ,限制了 范围内至少有一个位置饱和。
设 表示考虑到前 个位置,最后一个饱和位置为 的方案数。转移有三种:
- ,表示位置 为饱和;
- ,表示位置 为不饱和;
- 对于限制 ,将所有 赋值为不饱和。
发现只需要单点赋值为全局和,全局乘,前缀清空这三种操作。可以直接维护全局和 ,全局乘法标记 和被清空的最长前缀 即可做到线性。
总时间复杂度 。