• 二维树状数组模板


    完全版

     1 #include <cstdio>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 int lowbit(int x)
     7 {
     8     return x&(-x);
     9 }
    10 struct tree_arr
    11 {
    12     int c[1005];
    13     tree_arr()
    14     {
    15         clear();
    16     }
    17     void clear()
    18     {
    19         memset(c,0,sizeof(c));
    20     }
    21     int get_sum(int x)
    22     {
    23         int sum=0;
    24         while(x)
    25         {
    26             sum+=c[x];
    27             x-=lowbit(x);
    28         }
    29         return sum;
    30     }
    31     void update(int x,int d,int n)
    32     {
    33         while(x<=n)
    34         {
    35             c[x]+=d;
    36             x+=lowbit(x);
    37         }
    38     }
    39 } r[1005];
    40 int get_sum(int x,int y)///(x,y)
    41 {
    42     int sum=0;
    43     while(x)
    44     {
    45         sum+=r[x].get_sum(y);
    46         x-=lowbit(x);
    47     }
    48     return sum;
    49 }
    50 void update(int x,int y,int d,int n,int m)///n行,m列
    51 {
    52     while(x<=n)
    53     {
    54         r[x].update(y,d,m);
    55         x+=lowbit(x);
    56     }
    57 
    58 }
    59 int main()
    60 {
    61     int i,j,n=10,m=10;
    62     memset(r,0,sizeof(r));
    63     for(i=1; i<=n; i++)
    64     {
    65         for(j=1; j<=m; j++)
    66         {
    67             update(i,j,1,n,m);
    68         }
    69     }
    70     for(i=1; i<=n; i++)
    71     {
    72         for(j=1; j<=m; j++)
    73         {
    74             printf("%3d ",get_sum(i,j));
    75         }
    76         puts("");
    77     }
    78     return 0;
    79 }

    简化版

     1 int c[MAX][MAX];
     2 int n,m;
     3 int Lowbit(int x)
     4 {
     5     return x & (-x);
     6 }
     7 void Updata(int x,int y,int d)
     8 {
     9     int i,k;
    10     for(i=x; i<=n; i+=Lowbit(i))
    11         for(k=y; k<=m; k+=Lowbit(k))
    12             c[i][k]+=d;
    13 }
    14 int Get(int x,int y)
    15 {
    16     int i,k,sum = 0;
    17     for(i=x; i>0; i-=Lowbit(i))
    18         for(k=y; k>0; k-=Lowbit(k))
    19             sum += c[i][k];
    20     return sum;
    21 } 
  • 相关阅读:
    陶哲轩实分析 推论 13.4.7
    陶哲轩实分析 定理 13.4.5
    陶哲轩实分析 定理 13.4.5
    陶哲轩实分析 习题 13.4.6
    陶哲轩实分析 定理 13.3.5 :紧致度量空间上的连续函数一致连续
    陶哲轩实分析 习题 13.4.7
    陶哲轩实分析 定理 13.4.6
    二阶行列式和三阶行列式
    opencvminMaxldx寻找最大值和最小值
    opencvtranspose转置
  • 原文地址:https://www.cnblogs.com/xseventh/p/7352860.html
Copyright © 2020-2023  润新知