1

给定一个长度为 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

4

0 回答 0