前綴和差分

前綴和差分

一維前綴和

主要的做用是能夠快速的求出數組中任意一段區間的和數組

  • 核心代碼
S[i] = a[1] + a[2] + ... a[i]//S是前綴和數組,下邊從1開始,方便邊界的計算
a[l] + ... + a[r] = S[r] - S[l - 1]

二維前綴和

相似於一維前綴和,主要是爲了快速求出二維數組中人任意上下對角構成的區域數字之和code

  • 核心代碼
S[i, j] = 第i行j列格子左上部分全部元素的和
以(x1, y1)爲左上角,(x2, y2)爲右下角的子矩陣的和爲:
S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]

一維差分

主要是快速給一個區間中的全部的數加上一個數get

  • 核心代碼
給區間[l, r]中的每一個數加上c:B[l] += c, B[r + 1] -= c

二維差分

同上述一維差分相似(一維變二維)二維數組

  • 核心代碼
給以(x1, y1)爲左上角,(x2, y2)爲右下角的子矩陣中的全部元素加上c:
S[x1, y1] += c, S[x2 + 1, y1] -= c, S[x1, y2 + 1] -= c, S[x2 + 1, y2 + 1] += c
相關文章
相關標籤/搜索