时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
智乃在学习了前缀和以后,学会了先进行若干次区间加数操作,然后进行若干次查询,每次查一段

的区间和。
现在有一个长度大小为

的数组,数组中有一些非负整数,
请你完成区间加若干次多项式的操作,最后进行若干次区间查询和的操作。
具体来讲,接下来会进行

次修改操作,每次将会给你一个

次多项式
%3Dc_0x%5Ek%2Bc_1x%5E%7Bk-1%7D%2B...%2Bc_%7Bk-1%7Dx%5E1%2Bc_%7Bk%7D%7D)
,以及一段需要操作的目标数组区间

。
然后你需要对
%2Ca_%7Bl%2B1%7D%2Bf(2)...)
以此类推,也就是对目标区间的第一个数字加上一个
%7D)
,第二个数字加上
%7D)
...
在做完这些操作以后,还会进行

次查询操作,每次查询
一段
的区间元素和,因为这个数字可能很大,你只用输出其对
取余数后的结果即可。
输入描述:
第一行输入三个正整数
%7D)
。
接下来一行输入

个数字
)
表示数组元素的初始值。
接下来

行,每行首先输入三个整数
%7D)
表示需要操作的区间,以及多项式的最高次数为

次。
然后不换行,还是在该行后面继续输入

个非负整数
%7D)
,表示多项式为
%3Dc_0x%5Ek%2Bc_1x%5E%7Bk-1%7D%2B...%2Bc_%7Bk-1%7Dx%5E1%2Bc_%7Bk%7D%7D)
。
接下来

行,每行输入两个正整数
)
,表示查询元素和的查询区间。
输出描述:
对于每一个查询区间,输出
的区间元素和,对
取余数后的结果。
示例1
输入
复制
10 2 11
1000 1000 1000 100000 1000 1000 10000 10000 10000 100000
1 10 0 100
1 10 1 1 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
1 10
输出
复制
1101
1102
1103
100104
1105
1106
10107
10108
10109
100110
236055