前缀和是用来快速实现区间加减的方法(O(N^2)–>O(N)),可分为单维和多维。其实现形式是通过数据离线将下面是两个单维前缀和的代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int a[1000016];
int b[1000016];
int main() {
int n,m;
scanf("%d %d",&n,&m);
memset(b,0,sizeof b);
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
for(int i=1; i<=m; i++){
int q,l,r,p;
scanf("%d",&q);
if(q==1) {
scanf("%d %d %d",&l,&r,&p);
b[r+1]+=p;
b[l]-=p;
} else {
scanf("%d %d %d",&l,&r,&p);
b[r+1]-=p;
b[l]+=p;
}
}
int l,r;
scanf("%d %d",&l,&r);
for(int i=1;i<=n;i++)
b[i]+=b[i-1];
long long ans = 0;
for(int i=l;i<=r;i++)
ans+=a[i]+b[i];
printf("%lld",ans);
return 0;
}