Acwing 一维差分模板

101 阅读1分钟

image.png image.png image.png

image.png 797. 差分 - AcWing题库

#include<iostream>
using namespace std;
const int N=100010;
int a[N],b[N];//a为原数组,b为差分数组
int n,m;
void insert(int l,int r,int c)
{
    b[l]+=c;
    b[r+1]-=c;
}
int main()
{
    
    scanf("%d%d",&n,&m);
    
    //读取n个整数
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    //b数组初始化为a数组
    for(int i=1;i<=n;i++)insert(i,i,a[i]);
    
    //插入原数组
    while(m--)
    {
        int l=0,r=0,c=0;
        cin>>l>>r>>c;
        
        //b数组全部+c
        insert(l,r,c);
    }
    
    //b数组前缀和就得到a[]
    for(int i=1;i<=n;i++) a[i]=b[i]+a[i-1];
    
    for(int i=1;i<=n;i++)printf("%d ",a[i]);
   
    return 0;
}