码迷,mamicode.com
首页 > 编程语言 > 详细

POJ1195 二维树状数组

时间:2018-05-06 14:52:25      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:include   一个   操作   div   const   font   子矩阵   style   ios   

题目大意

给一个初始全0的矩阵,操作1为将(i,j)处的元素加上k

操作2为输出子矩阵(a,b)(c,d)的所有元素和

操作3为结束程序

二维树状数组模板

唯一要注意的是题目中从0开始标号,所以要将所有的坐标都加1再进行操作

# include<iostream>
# include<cstdio>
# include<cmath>
# include<algorithm>
const int mn = 1035;
int n;
struct Binary_tree{
int tr[mn][mn];
void add(int x,int y,int val)
{
    for(int i=x;i<=n;i+=i&-i)
        for(int j=y;j<=n;j+=j&-j)
        tr[i][j]+=val;
}
int qsum(int x,int y)
{
    int ret=0;
   for(int i=x;i>0;i-=i&-i)
        for(int j=y;j>0;j-=j&-j)
        ret+=tr[i][j];
    return ret;
}
}A;
int main()
{
   int opt,a,b,c,d;
   scanf("%d%d",&opt,&n);
   while(1)
   {
       scanf("%d",&opt);
       if(opt==3)
        break;
       else if(opt==1)
       {
           scanf("%d%d%d",&a,&b,&c);
           A.add(a+1,b+1,c);
       }
       else {
        scanf("%d%d%d%d",&a,&b,&c,&d);
        ++a,++b,++c,++d;
        printf("%d\n",A.qsum(c,d)+A.qsum(a-1,b-1)-A.qsum(c,b-1)-A.qsum(a-1,d));
       }
   }
   return 0;
}

 

POJ1195 二维树状数组

标签:include   一个   操作   div   const   font   子矩阵   style   ios   

原文地址:https://www.cnblogs.com/logeadd/p/8998029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!