poj 1195 (二维树状数组入门,模板题)

来源:互联网 发布:深圳行知小学怎么样 编辑:程序博客网 时间:2024/04/29 18:32

题目链接:点击打开链接

知识点:点击打开链接

题意:

输入指令n

n=0  输入s,将s*s的矩阵清零

n=1 输入X,Y,A,将(X,Y)这个方格对应的值加上A

n=2 输入L,B,R,T,求L<=i<=R,B<=j<=T范围内的矩阵的数值和

n=3 结束


模板题

#include <cstdio>#include <cstring>#include <string>#include <iostream>#include <algorithm>using namespace std;int a[1026][1026];int lowbit[1026];int s;void Modify(int x,int y,int data){for(int i=x;i<=s;i+=lowbit[i]){for(int j=y;j<=s;j+=lowbit[j]){a[i][j]+=data;}}}int sum(int x,int y){int result =0;for(int i=x;i>0;i-=lowbit[i]){for(int j=y;j>0;j-=lowbit[j]){result+=a[i][j];}}return result;}int main(){int n;for(int i=1;i<1026;i++){lowbit[i] = i&(-i);}while(1){scanf("%d",&n);if(n==0){scanf("%d",&s);for(int i=0;i<=s;i++){for(int j=0;j<=s;j++){a[i][j]=0;}}continue;}if(n==1){int X,Y,A;scanf("%d%d%d",&X,&Y,&A);Modify(X+1,Y+1,A);continue;}if(n==2){int L,B,R,T;scanf("%d%d%d%d",&L,&B,&R,&T);L++,B++,R++,T++;printf("%d\n",sum(R,T)-sum(L-1,T)-sum(R,B-1)+sum(L-1,B-1));continue;}if(n==3) break;}return 0;}


0 0
原创粉丝点击