二维树状数组
单点修改,子矩阵查询。
void add(int x,int y,int v){
for(;x<=n;x+=x&-x)
for(int i=y;i<=m;i+=i&-i)
c[x][i]+=v;//c[x][i]=max/min(c[x][i],v);
}
int sum(int x,int y){
int res=0;
for(;x;x-=x&-x)
for(int i=y;i;i-=i&-i)
res+=c[x][i];//res=max/min(res,c[x][i]);
return res;
}
发现只是把一重循环改成两重就好。
至于原因,分析难,反正背下来就好。
本文作者:wscqwq
本文链接:https://www.cnblogs.com/wscqwq/p/18363226
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步