POJ 1195

来源:互联网 发布:在线c语言编译器 编辑:程序博客网 时间:2024/05/23 15:33

【题目分析】
二维树状数组。


【代码】

#include <cstdio>int t[1025][1025],n,opt;inline void add(int x,int y,int a){    for (int i=x;i<=n;i+=i&(-i))        for (int j=y;j<=n;j+=j&(-j))            t[i][j]+=a;}inline int getsum(int x,int y){    int ret=0;    for (int i=x;i>=1;i-=i&(-i))        for (int j=y;j>=1;j-=j&(-j))            ret+=t[i][j];    return ret;}int main(){    scanf("%*d%d",&n);    while (scanf("%d",&opt)!=EOF&&opt!=3)    {        if (opt==1)        {            int x,y,a;            scanf("%d%d%d",&x,&y,&a);            add(x+1,y+1,a);        }        if (opt==2)        {            int x1,y1,x2,y2;            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);            ++x1,++x2,++y1,++y2;            printf("%d\n",getsum(x2,y2)-getsum(x2,y1-1)-getsum(x1-1,y2)+getsum(x1-1,y1-1));        }    }}
0 0
原创粉丝点击