前缀和
前缀和
我们在学习算法的过程中,总是会遇到一些查询综合的问题,若是遇到一次查询,直接for循环跑完得了,复杂度是O(n),但要是遇到多次区间的总和查询,比如n次查询m个区间,复杂度蹭蹭蹭的就上去了O(n+m)。
那么这个时候我们要想办法优化它,那么就有前缀和这个东西了。
\[\sum_{i=1}^{n}x_i\qquad
\]
前缀和
我们在学习算法的过程中,总是会遇到一些查询综合的问题,若是遇到一次查询,直接for循环跑完得了,复杂度是O(n),但要是遇到多次区间的总和查询,比如n次查询m个区间,复杂度蹭蹭蹭的就上去了O(n+m)。
那么这个时候我们要想办法优化它,那么就有前缀和这个东西了。
一般方法:
\[\sum_{i=1}^{n}x_i\qquad
\]
前缀和:
\[\sum_{i=b}^{c}x_i =\sum_{i=1}^{c}sum_i-\sum_{i=i}^{b-1}sum_i\qquad
\]
伪代码:
for(int i=1;i<=n;i++){
int n;
cin>>n;
sum[i]+=sum[i-1]+n//求出到每个位置的和
}
cout<<sum[c]-sum[b-1];//输出b到c的和
此时查询和的操作复杂度就变成了O(1)

浙公网安备 33010602011771号