编程题
### 问题描述
野兽先辈想维护一个包含 $n$ 个值的数组,并高效地处理以下类型的查询:
1. 增加范围 $[a, b]$ 内的每个值的值 $x$。
2. 将范围 $[a, b]$ 内的每个值设置为 $x$。
3. 计算范围 $[a, b]$ 内的值的总和。
### 输入格式
第一行输入有两个整数 $n$ 和 $q$,表示数组大小和查询的数量。
接下来一行有 $n$ 个值 $t_1, t_2, \dots, t_n$,表示数组的初始内容。
最后,有 $q$ 行描述查询。每行的格式是以下之一:$1$ $a$ $b$ $x$、$2$ $a$ $b$ $x$ 或 $3$ $a$ $b$。
### 输出格式
打印每个求和查询的答案。
### 样例输入
```
6 5
2 3 1 1 5 3
3 3 5
1 2 4 2
3 3 5
2 2 4 5
3 3 5
```
### 样例输出
```
7
11
15
```
### 评测数据规模
$1 \leq n, q \leq 10^5$,$1 \leq t_i, x \leq 10^6$,$1 \leq a \leq b \leq n$。