给定长度为N的一维整数数组A.我们需要Q查询以下每种类型:
注意:M固定为10 ^ 9 + 7
查询1:1 x y v:这意味着将v添加到1个基本索引数组中从x到y的所有元素,然后将它们模数为M。
for (i = x; i <= y; i++)
A[i] += v;
A[i] %= M;
查询2:2 x y v :这意味着将v乘以1个基本索引数组中x到y的所有元素,然后将它们模数为M。
for (i = x; i <= y; i++)
A[i] *= v
A[i] %= M
查询3:3 x y v:这意味着将v替换为1个基本索引数组中从x到y的所有元素。
for (i = x; i <= y; i++)
A[i] = v
查询4:4 x y:这是一个报告查询,需要查找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