前缀和

前缀和

​ 我们在学习算法的过程中,总是会遇到一些查询综合的问题,若是遇到一次查询,直接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)

posted @ 2021-03-15 14:37  RuanCat  阅读(66)  评论(0)    收藏  举报