差分

差分:
当频繁的对数组内的元素进行区域性性的加减运算的时候使用差分
差分数组的第一个值等于源数组的第一个值
差分数组的第k个值等于原数组第k个值减去第k-1个值
当要让原数组的 [L,R]区域内每个元素都 加/减 c的时候
只需要差分数组的[L](+/ -)c,差分数组的[R](-/+)c
最后原数组的结果等于差分数组的前缀和数组

#include<bits/stdc++.h>
using namespace std;

int n ,m;
int a[100005],b[100005];

void insert(int l, int r , int c)
{
    b[l] += c;
    b[r + 1] -= c;
}

int main()
{
    cin>>n>>m;
    for(int i = 1;i<= n;i++)
    {
        cin>>a[i];
        insert(i,i,a[i]);//差分数组构建好了 
    }
    for(int i = 1;i<=m;i++)
    {
        int l,r,c;
        cin>>l>>r>>c;
        insert(l,r,c);//将c加进数组b中,后面只需要累加b就得到数组a.
    } 
    for(int i =1 ;i<=n;i++)b[i] += b[i - 1];
    for(int i =1;i<=n;i++)cout<<b[i]<<" ";
    return 0;
}

 

posted @ 2023-04-07 15:36  小花护符  阅读(12)  评论(0编辑  收藏  举报