前缀和
前缀和:
1. 一维前缀和
公式:
\[f[i]=\sum_{j=0}^ia[j]
\]

每个计算都要循环一遍,太麻烦了!还有什么办法?
化简:\(f[i]=a[i]+f[i-1]\)
例题:
给你一个长度为\(n\)数列,问你\(m\)个问题,分别是:第\(b[i]\)个数之前的每一个数相加,和为多少?
先将每一个数算出它的和。
for(int i=1;i<=10001;i++)
{
f[i]=a[i]+f[i-1];//化简公式
}
再解决询问的问题。
for(int i=1;i<=m;i++)
{
cin>>b;//输入
cout<<f[b];
}
2. 二维前缀和

如图,\(f[i][j]=f[i-1][j]+f[i][j-1]\),但是我们多算了绿块\(f[i-1][j-1]\),还少算了红块\(f[i][j]\),只要减掉,再加上,就可以啦 。

浙公网安备 33010602011771号