给定a[1],a[2],a[3],…,a[n]
构造差分数组b[N],使得
a[i] = b[1]+b[2]+b[3]+…+b[i]
核心操作:
将a[L]到a[R]中的每个数全部加上C
等价于:
b[L]+=C,b[R+1]-=C;
例题:
输入一个长度为n的整数序列。
接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。
请你输出进行完所有操作后的序列。
输入格式
第一行包含两个整数n和m。
第二行包含n个整数,表示整数序列。
接下来m行,每行包含三个整数l,r,c,表示一个操作。
输出格式
共一行,包含n个整数,表示最终序列。
代码如下:
#include <iostream>
using namespace std;
const int N = 100010;
int a[N];
int main()
{int n,m;cin>>n>>m;for (int i = 1;i<=n;i++) cin>>a[i];for (int i = n;i>=1;i--) a[i]-=a[i-1];while(m--){int l,r,c;cin>>l>>r>>c;a[l]+=c,a[r+1]-=c;}for (int i = 1;i<=n;i++){a[i]+=a[i-1];}for (int i = 1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;return 0;
}