区间加
题号:NC229137
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

给出长度为 的序列 ,有 个操作,每个操作为以下几种之一:
1. 给出 ,对于 
2. 给出 ,对于 
3. 给出 ,求 ,对  取模。
其中,

输入描述:

第一行两个整数 ,含义见题目描述。
第二行输入 个整数 a_1,a_2,...,a_n,为给定的序列。
接下来 行,每行输入三个整数 ,表示操作的类型为 ,操作的区间为

输出描述:

对于每个操作 ,输出一个整数,为对应的区间和对  取模的结果。
示例1

输入

复制
5 4
5 2 2 9 7
1 1 5
3 1 1
2 1 3
3 2 5

输出

复制
6
34