前缀和与差分
前缀和顾名思义前面几个数相加的和,可以直接以a[i] += a[i-1]实现。
给定一个数组1 2 3 4 5,假设要在区间[2,4]内进行操作,给区间内每个值加上3,再计算区间和。
如果一个个加再计算区间和显然太慢。
可以另开一个b数组存取需要改变的值,再最后对a数组的状态进行一次更改。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include<algorithm>
using namespace std;
const int maxn = 1005;
int a[maxn],b[maxn];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];//初始化数组a
}
int l,r,q,m;//表示在区间l-r加上q,进行m次操作
cin>>m>>l>>r>>q;
for(int i=1;i<=m;i++)
{
b[l] += q;
b[r+1] -= q;
}
int add = 0;
for(int i=1;i<=100;i++)
{
add += b[i];
a[i] += a[i-1] + add;
}
int x,y;
cin>>x>>y;
cout<<a[y]-a[x-1]<<endl;
return 0;
}