【模板】线段树2
题号:NC226536
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给你一个长度为n的整数序列a_1, a_2, ...a_n,和q次操作,每次操作可能进行如下动作:

1. 选择一个区间[l,r],将区间内每个元素加上k。
2. 选择一个区间[l,r], 求a_l, ... , a_r的和。

输入描述:

第一行两个整数n和q,表示数组长度和操作个数。
接下来一行n个整数,表示数组a_1, a_2, ...a_n
接下来q行,每行第一个数op,表示动作类型。
若op=1,则后面有3个整数l,r,k,表示动作1 的三个参数。
若op=2,则后面有2个整数l,r,表示动作2的两个参数。
参数含义详见题目描述。


输出描述:

对每次op=2的操作,请输出一行表示和值。
示例1

输入

复制
4 5
6 2 4 5
1 1 2 5
1 1 4 2
2 1 4
1 3 3 -8
2 3 4

输出

复制
35
5