【前缀和与差分】
?前綴和
前綴和的作用:快速計(jì)算數(shù)組中某一段區(qū)間內(nèi)的總和
1.需要兩個(gè)額外的數(shù)組,來(lái)存儲(chǔ)原始數(shù)據(jù)的數(shù)組 和 計(jì)算過(guò)前綴的數(shù)組。其原理為前綴和的數(shù)組中每個(gè)元素用來(lái)保存前i個(gè)原數(shù)組中的和,下一個(gè)元素更新就采用s[i] = s[i] - 1 + a [i] 來(lái)持續(xù)更新當(dāng)前的元素。
2.首先需要對(duì)前綴和數(shù)組s進(jìn)行初始化,s[0] 默認(rèn)初始化為 0 ,從1開(kāi)始進(jìn)行初始化。
3.計(jì)算原數(shù)組中L到R某一段區(qū)間 可以直接使用s[R] - s[L - 1]。
#include <iostream>using namespace std;const int N = 100010;int n, m; int a[N], s[N];int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]);for (int i = 1; i <= n; i ++ ) s[i] = s[i - 1] + a[i]; // 前綴和的初始化while (m -- ){int l, r;scanf("%d%d", &l, &r);printf("%d\n", s[r] - s[l - 1]); // 區(qū)間和的計(jì)算}return 0; }差分
1.差分為前綴和的逆運(yùn)算
2.
總結(jié)
- 上一篇: C++ 11 新特性(十一)final和
- 下一篇: 【WebRTC---序篇】(一)为什么要