#ds204. 线段树打标记2

线段树打标记2

线段树打标记2

题目描述

给nn个数a1,a2,a3,…,ana_1, a_2, a_3, \dots, a_n。

支持qq个操作:

  1. 1 l r d,令所有的ai(l≤i≤r)a_i (l\leq i\leq r)加上dd。
  2. 2 l r d,令所有的ai(l≤i≤r)a_i (l\leq i\leq r)乘上dd。
  3. 3 l r d,令所有的ai(l≤i≤r)a_i (l\leq i\leq r)等于dd。
  4. 4 l r,查询(∑i=lrai) mod (109+7)\left(\sum_{i=l}^r a_i\right) \bmod (10^9+7)。

输入格式

第一行两个整数n,q(1≤n,q≤2×105)n, q (1\leq n, q\leq 2 \times 10^5)。

接下来一行nn个整数a1,a2,…,an(1≤ai≤109)a_1, a_2, \dots, a_n (1 \leq a_i\leq 10^9)。

接下来qq行,每行一个形如1 l r d, 2 l r d, 3 l r d或者4 l r的操作,保证1≤l≤r≤n,1≤d≤1091\leq l\leq r\leq n, 1\leq d\leq 10^9。

输出格式

对于每个查询,输出一行,表示答案。

样例输入

5 7
1 2 3 4 5
4 1 5
1 2 3 4
4 1 5
2 3 4 5
4 1 5
3 4 5 1
4 1 5

样例输出

15
23
67
44