给定一个长度为 N 的一维整数数组 A。我们需要 Q 次查询以下类型中的每一种:
注意:M 固定为 10^9 + 7
查询 1 : 1 xyv :这意味着将 v 添加到 1 个基本索引数组中从 x 到 y 的所有元素,然后将它们取模 M。
for (i = x; i <= y; i++)
A[i] += v;
A[i] %= M;
查询 2 : 2 xyv:这意味着将 v 与 1 个基本索引数组中从 x 到 y 的所有元素相乘,然后将它们取模 M。
for (i = x; i <= y; i++)
A[i] *= v
A[i] %= M
查询 3 : 3 xyv :这意味着将 v 替换为 1 个基本索引数组中从 x 到 y 的所有元素。
for (i = x; i <= y; i++)
A[i] = v
查询 4 : 4 xy :这是一个报表查询,需要找到 A 中从 x 到 y 的值的总和,即
sum = 0;
for (i = x; i <= y; i++)
sum += A[i]
sum %= M
Output sum.
现在如何处理这些查询?如果它是带有段树的加法和求和查询,我知道要处理查询。但是不知道这个。请帮我解决这个问题。
约束:1 ≤ N,Q ≤ 10^5 和 1 ≤ A[i],v 的初始值 ≤ 10^9