【POJ 1195 Mobile phones】解题报告

来源:互联网 发布:安装linux系统教程 编辑:程序博客网 时间:2024/04/29 16:06
#include<cstdio>#include<algorithm>#include<cmath>#include<iostream>#define inf 0x3f3f3f3f#define LL unsigned long long#define maxn 1025using namespace std;int s;int num[maxn][maxn];int k,a,b,c,d;int lowbit(int x){return x&(-x);}void adde(int x,int y,int add){for(int i=x;i<=s;i+=lowbit(i)){for(int j=y;j<=s;j+=lowbit(j)){num[i][j]+=add;}}}int query(int x,int y){int ans = 0;for(int i=x;i>0;i-=lowbit(i)){for(int j=y;j>0;j-=lowbit(j)){ans+=num[i][j];}}return ans;}/******Program Begin*********/int main(){scanf("%d",&s);scanf("%d",&s);while(scanf("%d",&k)==1){if(k==1){scanf("%d%d%d",&a,&b,&c);a++,b++;adde(a,b,c);}if(k==2){scanf("%d%d%d%d",&a,&b,&c,&d);a++,b++,c++,d++;printf("%d\n",query(c,d)-query(a-1,d)-query(c,b-1)+query(a-1,b-1));}if(k==3)break;}return 0;}/*******Program End**********/
裸的二位树状数组
0 0