zoukankan      html  css  js  c++  java
  • poj1195

    题意:给定一个矩阵有查询有添加操作。

    hit :很明显是二维树状数组(第一道二维fenwick哈)

    横向纵向维护两个树状数组所以是二维,详见代码

      1 //二维树状数组

     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 using namespace std;
     6 const int MAX=1024 +10;
     7 int c[MAX][MAX];
     8 int n;
     9 int lowbit(int x)
    10 {
    11     return x&(-x);
    12 }
    13 void add(int x,int y,int d)
    14 {
    15     for(int i=x;i<=n;i+=lowbit(i))
    16     {
    17         for(int j=y;j<=n;j+=lowbit(j))
    18         {
    19             c[i][j]+=d;
    20         }
    21     }
    22 }
    23 int sum(int x,int y)
    24 {
    25     int ans=0;
    26     for(int i=x;i>=1;i-=lowbit(i))
    27     {
    28         for(int j=y;j>=1;j-=lowbit(j))
    29         {
    30             ans+=c[i][j];
    31         }
    32     }
    33     return ans;
    34 }
    35 int main()
    36 {
    37     int s,x,y,a;
    38     int x1,x2,y2,y1;
    39     memset(c,0,sizeof(c));
    40     while(scanf("%d",&s)&&s!=3)
    41     {
    42         if(s==0) scanf("%d",&n);
    43         else if(s==1)
    44         {
    45             scanf("%d %d %d",&x,&y,&a);
    46             add(x+1,y+1,a);
    47         }
    48         else
    49         {
    50             scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
    51             x1++,x2++,y1++,y2++;
    52             long long ans=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1);
    53             printf("%lld ",ans);
    54         }
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    剑指offer39-平衡二叉树
    剑指offer37-数字在排序数组中出现的次数
    剑指offer36-两个链表的第一个公共结点
    剑指offer31-整数中1出现的次数
    剑指offer30-连续子数组的最大和
    剑指offer28-数组中出现次数超过一半的数字
    剑指offer26-二叉搜索树与双向链表
    剑指offer21-栈的压入、弹出序列
    剑指offer16-合并两个排序的链表
    C#-杂碎
  • 原文地址:https://www.cnblogs.com/acvc/p/3534472.html
Copyright © 2011-2022 走看看