前缀和与差分

前缀和与差分

一.一维前缀和

递推公式:prefixi = prefixi-1 + arri-1(下标从1开始)

区间和计算:suml, r = prefixr - prefixl-1

时间复杂度:O(n)
空间复杂度:O(n)

二.一维差分

dL+=cdL += cdL+=c

dR+1−=cdR+1 -= cdR+1−=c(若 R+1>nR+1 > nR+1>n 则忽略)

通过一维前缀和还原

三 . 二维前缀和

cpp 复制代码
pre[i][j] = a[i][j] + pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1]
解释:

mat[i][j]是当前元素

pre[i-1][j]是上方矩形区域的和

pre[i][j-1]是左侧矩形区域的和

pre[i-1][j-1]是被重复计算的部分,需要减去

查询

cpp 复制代码
sum = pre[x2][y2] - pre[x1-1][y2] - pre[x2][y1-1] + pre[x1-1][y1-1]
解释:

prex2y2是整个大矩形区域的和

减去上方不需要的区域prex1-1y2

减去左侧不需要的区域prex2y1-1

加上被重复减去的左上角区域prex1-1y1-1

四 . 二维差分

cpp 复制代码
D[x1][y1]+=c     // 影响右下所有区域
D[x1][y2+1]−=c  // 抵消右侧多余区域
D[x2+1][y1]−=c  // 抵消下方多余区域
D[x2+1][y2+1]+=c // 补偿重复抵消区域

原理‌:通过四个位置的增减,使修改仅作用于目标子矩阵(容斥原理)

cpp 复制代码
for (int i = 1; i <= n; i++)
  for (int j = 1; j <= m; j++)
    D[i][j] = A[i][j] - A[i-1][j] - A[i][j-1] + A[i-1][j-1];
相关推荐
w_zero_one2 小时前
算法--模拟
java·数据结构·算法
秋天的怀念_David2 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
秋天的怀念_David3 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪3 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪3 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
小羊没烦恼!5 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
wanderist.5 小时前
202609CSP认证P3
算法
云淡风轻~窗明几净5 小时前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论
机器学习之心6 小时前
PINN × SVM × NSGA-II × 熵权TOPSIS:一套跑通「建模—优化—决策」的多目标优化框架
算法·机器学习·支持向量机
别动我齐刘海6 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人