维护区间加等差数列的求和问题
这里直接以luogu上的一道了例题为例: https://www.luogu.com.cn/problem/P1438 题目描述 维护一个数列{a[i]},支持两种操作: 1、1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。即:令a[L]=a[L]+K,a[L+1]=a[L+1]+K+D, a[L+2]=a[L+2]+K+2D……a[R]=a[R]+K+(R-L)D。 2、2 P:询问序列的第P个数的值a[P]。 输入格式 第一行两个整数数n,m,表示数列长度和操作个数。 第二行n个整数,第i个数表示a[i](i=1,2,3…,n)。 接下来的m行,表示m个操作,有两种形式: 1 L R K D 2 P 字母意义见描述(L≤R)。 输出格式 对于每个询问,输出答案,每个答案占一行。 输入输出样例 输入 #1 复制 5 2 1 2 3 4 5 1 2 4 1 2 2 3 输出 #1 复制 6 说明/提示 数据规模: 0≤n,m≤100000 |a[i]|,|K|,|D|≤200 思路: 设原数组为a,考虑对a进行差分,对于 差分数组d, a[p] = d[1] + d[2] + ... + d[p] ,而对a[l]~a[r]加上等差数列的值,在数组d上的修改为: d[l] = a[l] - a[l - 1]