编程题
### 问题描述
Nick 最近沉迷于一款角色养成游戏,他有 $n$ 个角色,分别为 $p_1,p_2,p_3, \ ... \ ,p_n$ ,每个角色有当前经验值 $a_i$ 。
在接下来的 $m$ 次操作中,它可以使角色 $p_i$ 以及其左右的 $d$ 名角色都增加 $w$ 经验值或者查询角色 $p_i$ 的当前经验值。
例如,在一次操作中,若 $n = 5, i = 3, d = 1, w = 3$ ,则 $p_3$ 和 $p_3$ 左边的一个角色 $p_2$ 以及 $p_3$ 右边的一个角色 $p_4$ ,即 $p_2, p_3, p_4$ 这三个角色都增加 $3$ 点经验值。
但需要注意的是,若该角色向左 $d$ 个位置或向右 $d$ 个位置后超出长度为 $n$ 的区间,则会从另一端开始,继续延伸剩余位置。
例如,在另一次操作中,若 $n = 10, i = 1, d = 2, w = 5$ ,则 $p_1, p_2, p_3, p_9, p_{10}$ 五个角色都增加 $5$ 点经验值( $n = 10$ ,第一个角色向左 $2$ 个位置,超出区间左端,因此从右端,即第 $10$ 个角色开始向左 $2$ 个位置,若超出区间右端,同理从区间左端开始向右)。但是即使一个角色被多次记入区间中,依然只会增加一次 $w$ 经验值,如 $n = 3, i = 2, d = 6, w = 6$ ,此时这三个角色都被多次计入增加经验值的区间,但只增加 $6$ 点经验值。
你需要做的就是帮助 Nick 在每次查询操作中,将查询的结果输出。
### 输入格式
第一行给出两个整数 $n$ 和 $m$ ,表示角色个数和操作次数。
接下来一行输入 $n$ 个整数,表示每个角色的初始经验值 $a_i$ 。
接下来 $m$ 行,每行输入 $1 \ i \ d \ w$ 或 $2 \ i$ 表示一个操作。
第一个数字 $op$ 表示操作种类:
$op = 1$ ,修改操作。
输入三个整数 $i,d,w$ 。表示将 $a$ 数组的第 $i$ 位以及向左右按规则各延伸 $d$ 个单位的角色都增加 $w$ 点经验值。
$op = 2$ ,查询操作。
输入一个整数 $i$ ,表示查询 $n$ 个角色中的第 $i$ 个角色的当前经验值。
### 输出格式
对于每个 $op = 2$ 的操作,在每一行中打印该角色当前经验值。
### 样例输入
```txt
5 6
1 2 3 4 5
1 3 1 4
2 2
1 2 3 4
2 4
1 5 1 2
2 1
```
### 样例输出
```txt
6
12
7
```
### 评测数据规模
对于所有评测数据: $1 \le n,m,d \le 10^6$ , $1 \le a_i,w \le 10^9$ , $1 \le i \le n$ 。
对于所有评测数据,保证答案的范围小于 $2^{64}$ 。