题号:NC54058
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld
题目描述
给定一个长度为n的序列(a[1],a[2],……,a[n])还有m次操作:
1 l r:询问区间[l,r]的元素和
2 l r x:将区间[l,r]内的元素都加上x
3 M x:将序列所有下标k(1<=k<=n)满足k%M==0(即k是M的倍数)的元素a[k]加上x
1<=n<=1e5,1<=m<=2e5,1<=a[i]<=1e8,1<=l,r,M<=n,1<=x<=1e5
输入描述:
第一行两个整数n,m
接下来n个数表示初始序列
接下来m行每行第一个数为操作方法opt,
若opt=1,后面跟着两个整数l,r
若opt=2,后面跟着三个整数l,r,x
若opt=3,后面跟着两个整数M,x
输出描述:
对于每一个操作1,输出一行表示答案
示例1
输入
复制
5 4
1 2 3 4 5
1 1 5
2 2 4 1
3 2 2
1 1 5