前缀和
是一个运用预处理思想。
作用可以快速的得到一段区间的和。
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e5+5,INF=0x3f3f3f3f;
int ans=0,cnt=0,n;
int main()
{
int a[N],b[N];
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>a[i];
b[i]=a[i]+a[i-1];
}
return 0;
}
前缀和二维数组
int a[N],b[N],c[N][N],d[N][N];
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>a[i];
b[i]=a[i]+b[i-1];
}
cin>>n>>m;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
cin>>c[i][j];
d[i][j]=c[i][j]+d[i-1][j]+d[i][j-1]-d[i-1][j-1];
}
}
差分
作用:可以快速的的对任意区间进行操作(加减)
int a[N],b[N],k,l;//b数组是差分数组
intc[N][N],d[N][N];
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>a[i];
b[i]=a[i]-a[i-1];
}
cin>>k>>l>>r;
b[k]+=r;
b[l+1]-=r;
for(int i=1;i<=n;++i)
{
b[i]+=b[i-1];
cout<<b[i];
}