很悲剧 刚刚写完 页面崩溃了 写的东西都没了 还以为这个博客可以自动保存呢 不想再写一遍了
刚刚 看了树状数组 精髓还是没有理解 写了一个题目 poj 1195 很适合初学树状数组的人做 本人菜鸟 刚刚接触acm 把代码贴上吧
用cin和scanf时间差了一倍
#include <iostream> #include <stdio.h> using namespace std; int MAX; #define M 1030 void update(int ,int,int ); int c[M][M]; int lowbit(int); int sum(int ,int); int main() { int result; int id,S,x1,y1,x2,y2,X,Y,A; cin>>id; while(id!=3) { if(id==0){ cin>>S ; MAX=S; } if(id==1){ scanf("%d%d%d",&X,&Y,&A); update(X+1,Y+1,A); } if(id==2){ scanf("%d%d%d%d",&x1,&y1,&x2,&y2); result=sum(x2+1,y2+1)+sum(x1,y1)-sum(x1,y2+1)-sum(x2+1,y1); cout<<result<<endl; } scanf("%d",&id); } } // 树状数组 2d int lowbit(int x) { return x&(-x); } int sum(int p,int q) { int total=0; int x=p,y; while(x>0) { y=q; while(y>0) { total+=c[x][y]; y-=lowbit(y); } x-=lowbit(x); } return total; } void update(int p,int q,int val) { int x=p,y; for(x=p;x<=MAX;x+=lowbit(x)) for(y=q;y<=MAX;y+=lowbit(y)) c[x][y]+=val; }