#1296. 网易云

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: Leohh

题目描述

Leohh的歌单里一共有 nn 首歌,第 ii 首歌的初始好感度为 ai2a_i^2 。Leohh是那种一首歌越听越上头的人,所以如果第 ii 首歌一共被听了 zz 次,那么这首歌的好感度就是 (ai+z)2(a_i+z)^2 。Leohh每次听歌会从歌单中先截取一部分然后不断循环播放,比如截取了从第 xx 首歌开始,在第 yy 首歌结束的这一部分(包含 x,yx,y ),然后把这一部分循环听了 zz 遍。

现在你需要处理 mm 个事件,事件只有两种类型:第一种事件为Leohh截取了从 xxyy 的歌单,然后循环听了 zz 遍;第二种事件为Leohh询问你当前从第 xx 首到第 yy 首这部分歌的好感度之和mod(109+7)\bmod (10^9+7)的值为多少。

输入格式

第一行两个整数 n,mn,m ,分别表示歌曲总数和事件数

第二行 nn 个整数 a1ana_1\cdots a_n

接下来 mm 行,每行代表一个事件:

若为第一种事件,则这一行是四个整数:1 x y z1\ x\ y\ z,用空格分隔

若为第二种事件,则这一行是三个整数:2 x y2\ x\ y,用空格分隔

输出格式

对于每个第二种事件,输出单独的一行,包含一个整数 ss 表示好感度总和

样例

样例输入

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

样例输出

14
29
91

数据范围与提示

1n,m,ai,z105, 1xyn1\leq n,m,a_i,z\leq 10^5,\ 1\leq x\leq y\leq n