一维差分 acwing 797

#include<iostream>

using namespace std;

const int N=1e5+10;
int n,m;
int a[N],b[N];

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

int main()
{
    
    
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=n;i++) insert(i,i,a[i]);//初始差分b[]数组 
	while(m--)
	{
    
    
		int l,r,c;
		scanf("%d%d%d",&l,&r,&c);
		insert(l,r,c);//进行加法操作 
	}
	for(int i=1;i<=n;i++) b[i]+=b[i-1];//注意是加上 b[i-1]
	for(int i=1;i<=n;i++) printf("%d ",b[i]);
	return 0;
}
给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c

猜你喜欢

转载自blog.csdn.net/qq_47874905/article/details/109722786