Skip to content

Prefix Sum

介紹

前綴和是一種快速計算區間某性質的技巧,與差分互為逆運算。

一維前綴和

一維前綴和的每項公式為: $$ pre[i] = \sum_{i=1}^{n} a[i] = pre[i - 1] + a[i] $$

若要求出區間 \([l, r]\) 的總和,則答案為:

\[ ans = pre[r] - pre[l - 1] \]

二維前綴和

二維前綴和的每項公式為:

\[ pre[i][j] = \sum_{i=1}^{n} \sum_{j=1}^{m} a[i][j] = a[i][j] + pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1] \]

若要求出長方形 \((x_1, y_1), (x_2, y_2)\) 的總和,則答案為:

\[ ans = pre[x_2][y_2] - pre[x_1 - 1][y_2] - pre[x_2][y_1 - 1] + pre[x_1 - 1][y_1 - 1] \]

前綴 XOR

由於 XOR 操作具有以下性質:

\[ a \oplus a = 0\\ (a \oplus b) \oplus c = a \oplus (b \oplus c) = a \oplus b \oplus c \]

因此若對 XOR 做前綴和,則會如以下形式:

\[ prefix[i] = prefix[i - 1] \oplus a[i]\\ \]

若要求出區間 \([l, r]\) 的 XOR 結果,則答案為:

\[ ans = prefix[r] \oplus prefix[l - 1] \]