二维树状数组可以高效解决二维动态矩形计数问题。
我先带你回顾一下一维树状数组是怎样的:

cn=n∑i=n−lowbit(n)+1ai
设 {d(n)} 为
⎧⎨⎩d1=ndi=di−1−lowbit(di−1)i>1di>0i∈N+
设 {f(n)} 为
⎧⎨⎩f1=nfi=fi−1+lowbit(fi−1)i>1fi⩽Vi∈N+
其中 V 为下标的最大值。
则前缀和为
n∑i=1ai=∑j∈d(n)cj
而改变了 an 后,∀x∈f(n),cx 都要改变。
让我们升一维,二维:
由于本蒟蒻不会做 3D 演示图片,2D 凑合看吧 qwq。
当查询
7∑i=17∑j=1ai,j
时,会用到这些 c(相同颜色为其管辖范围,感谢四色定理):

即
n∑i=1m∑j=1ai,j=∑x∈d(n)∑y∈d(m)cx,y
而改变了 an,m 后,∀x∈f(n),y∈f(m),cx,y 都要改变。
单点修改和矩形(二维前缀的容斥)查询单次均为 O(log(nm))。
其实扩展到多维也是类似的……
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义