前缀和是用来快速实现区间加减的方法(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;
}