题意:给定矩阵,对点更新,询问给两个点,求这两个点构成矩形内元素和。
二维数组可以对点更新,sum 求的是(1,1)到(x,y)的和。
#include<iostream> #include<cmath> #include<queue> #include<cstring> #include<string> #include<map> #include<stack> #include<set> #include<cstdio> #include<algorithm> using namespace std; int n; int a[1050][1050]; int lowbit(int x){ return x&(-x); } void add2(int x,int y,int num){ for(int i = x; i <= n; i += lowbit(i)) for(int j = y; j <= n; j += lowbit(j)) a[i][j] += num; } int sum2(int x,int y){ int res = 0; for(int i = x; i > 0; i -= lowbit(i)) for(int j = y; j > 0; j -= lowbit(j)) res += a[i][j]; return res; } int main(){ //freopen("a.txt", "r", stdin); int x,y,w,xx,yy,q; scanf("%d%d", &q, &n); memset(a, 0, sizeof(a)); while(scanf("%d", &q) && q<3){ if(q==1){ scanf("%d%d%d", &x, &y, &w); add2(++x, ++y, w); }else if(q==2){ scanf("%d%d%d%d", &x, &y, &xx, &yy); x++;y++;xx++;yy++; printf("%dn", sum2(xx,yy)-sum2(x-1,yy)-sum2(xx,y-1)+sum2(x-1,y-1)); } } return 0; }