树状数组 https://oi-wiki.org/ds/fenwick/ 题目描述 这是一道模板题。 给出一个 n×m 的零矩阵 A,你需要完成如下操作: 1 x y k:表示元素 A_{x,y} 自增 k; 2 a b c d:表示询问左上角为 (a,b),右下角为 (c,d) 的子矩阵内所有数的和。 输入格式 输入的第一行有两个正整数 n, m; ...
update是从(x,y)处往下更新,sum是求(x,y)到(0, 0)的和 lowbit(x) 表示二进制下x的最低位的1与它后面的0构成的树,那么对于奇数来说就是1 假设6x6的数组,更新(2,3)也就是更新标绿的表格 求sum(5, 3)的值就是求标蓝表格的和 代码 #include<cstdio>#include<cstring>intn, m;longlongarr[5005]...
#133. 二维树状数组 1:单点修改,区间查询 题目描述 这是一道模板题。 给出一个 n\times mn×m 的零矩阵 AA,你需要完成如下操作: 1 x y k:表示元素 A_{x,y}Ax,y 自增kk; 2 a b c d:表示询问左上角为 (a,b)(a,b),右下角为 (c,d)(c,d) 的子矩阵内所有数的和。 输入格式 输入...
树状数组 https://oi-wiki.org/ds/fenwick/ 题目描述 这是一道模板题。 给出一个 n×m 的零矩阵 A,你需要完成如下操作: 1 x y k:表示元素 A_{x,y} 自增 k; 2 a b c d:表示询问左上角为 (a,b),右下角为 (c,d) 的子矩阵内所有数的和。 输入格式 输入的第一行有两个正整数 n, m;接...
二维数组数组板子,和一维基本类似: void update(int x,int y,int z) { // cout<<"?"; for(int i=x;i<=n;i+=lowbit(i)) for(int j=y;j<=n;j+=lowbit(j)) c[i][j]+=z; } int getsum(int x,int y) { int sum = 0 ; for(int i=x;i>=1;i-=lowbit(i)) for(int j=y;...
常见的二维树状数组是单点更新,区间查询; 而这里是区间更新,单点查询。 由于是单点查询,这里直接用差分的思想做的:a[i][j]表示坐标(i,j)到(n,m)增加多少。 如果矩形(x1,y1,x2,y2)加一,则a[x1][x2]+1;a[x1][y2+1]-1;a[x2][y1+1]-1,a[x2][y2]+1;那么所求点(i,j)的值就是前缀...
二维树状数组 1:单点修改,区间查询 LibreOJ - 133 这是一道模板题。 给出一个n×mn×m 的零矩阵AA,你需要完成如下操作: 1 x y k:表示元素Ax,yAx,y 自增kk; 2 a b c d:表示询问左上角为(a,b)(a,b),右下角为(c,d)(c,d) 的子矩阵内所有数的和。
} int main(){ scanf("%lld%lld",&n,&m); ll type; while(scanf("%lld",&type)!=EOF){ if(type==1){ ll x,y,k; scanf("%lld%lld%lld",&x,&y,&k); add(x,y,k); } if(type==2){ ll x1,y1,x2,y2; scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2); ...
这是一道二维树状数组的引用,和之前的一道有一点差别; 主要注意这里的查询操作; getsum(x,y)+getsum(a-1,b-1)-getsum(x,b-1)-getsum(a-1,y) #include <iostream>usingnamespacestd;intn,m;intsum[1005][1005],vis[1005][1005];intlowbit(intx) ...