Skip to content

前缀和

一维前缀和

前缀和也是可以用在异或运算上的

原数组下标从 0 开始:

  • 定义:s[i]=a[0]+a[1]+...+a[i1]=j=0i1a[j]
  • 构造:s[0]=0s[i]=s[i1]+a[i1]
  • 使用:sum(a[lr])=s[r+1]S[l]

原数组下标从 1 开始:

  • 定义:s[i]=a[1]+a[2]+...+a[i]=j=1ia[j]
  • 构造:s[0]=0s[i]=s[i1]+a[i]
  • 使用:sum(a[lr])=S[r]S[l1]

二维前缀和

矩阵横纵坐标均从 1 开始:

  • 定义:s[i][j]=ij=x=1i(y=1ja[x][y])
  • 构造:s[i][j]=s[i1][j]+s[i][j1]s[i1][j1]+a[i][j]
  • 使用:以 (x1,y1) 为左上角,(x2,y2) 为右下角的子矩阵的和为: s[x2][y2]s[x11][y2]s[x2][y11]+s[x11][y11]