有工具在手,这题就是一个模板题,就是有点不清楚,最后问的是单个元素的值,它怎么sum求出来的
#include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> using namespace std; #define maxn 1005 int c[maxn][maxn]; int Row, Col; inline int Lowbit(const int &x) { return x & (-x); } int Sum(int i, int j) { int tempj, sum = 0; while (i > 0) { tempj = j; while (tempj > 0) { sum += c[i][tempj]; tempj -= Lowbit(tempj); } i -= Lowbit(i); } return sum; } void Update(int i, int j, int num) { int tempj; while (i <= Row) { tempj = j; while (tempj <= Col) { c[i][tempj] += num; tempj += Lowbit(tempj); } i += Lowbit(i); } } int main() { #ifndef ONLINE_JUDGE freopen("G:/1.txt","r",stdin); freopen("G:/2.txt","w",stdout); #endif int T; scanf("%d",&T); while(T--) { memset(c,0,sizeof(c)); int N,Q;scanf("%d%d",&N,&Q);getchar(); Row=N;Col=N; for(int i=1;i<=Q;i++) { char ques;int a,b,c,d; scanf("%c ",&ques);//getchar(); if(ques=='C') { scanf("%d%d%d%d",&a,&b,&c,&d);getchar(); c++;d++; Update(a,b,1); Update(c,d,1); Update(c,b,-1); Update(a,d,-1); } else if(ques=='Q') { scanf("%d%d",&a,&b);getchar(); printf("%d\n",1&Sum(a,b)); } } printf("\n"); } }
poj2155 Matrix 【二维树状数组】
时间: 2024-10-13 06:48:53