Bootstrap

【算法】797. 差分

题目

797. 差分

思路

差分的实质是通过构造数组b减少时间复杂度,数组a为初始数据,构造数组b,数组a是b的前缀和,通过对数组b操作就可以实现数组a每个数加上c,而对数组b的操作在单位时间内即可完成,对数组b操作完后,再用b表示a。

代码

#include<iostream>
using namespace std;
const int N=100010;
int main()
{
    int n,m;
    cin>>n>>m;
    int a[N],b[N];
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
        b[i]=a[i]-a[i-1];
    }
    while(m--)
    {
        int l,r,c;
        cin>>l>>r>>c;
        b[l]=b[l]+c;
        b[r+1]=b[r+1]-c;
    }
    for(int i=1;i<=n;i++)
    {
        a[i]=a[i-1]+b[i];
        cout<<a[i]<<" ";
    }
    return 0;
}
;