zoukankan      html  css  js  c++  java
  • 二维树状数组

    Mobile phones http://poj.org/problem?id=1195

     1 #include<cstdio>
     2 #include<cstring>
     3 #define mt(a,b) memset(a,b,sizeof(a))
     4 const int M=1030;
     5 class Two_Tree_Array {  // 二维树状数组
     6     typedef int typev;
     7     typev c[M][M];
     8 public:
     9     void init() {
    10         mt(c,0);
    11     }
    12     int lowb(int t) {
    13         return t&(-t);
    14     }
    15     void add(int x,int y,typev v) {
    16         for(int i=x; i<M; i+=lowb(i))
    17             for(int j=y; j<M; c[i][j]+=v,j+=lowb(j));
    18     }
    19     typev sum(int x,int y) {
    20         typev res=0;
    21         for(int i=x; i>0; i-=lowb(i))
    22             for(int j=y; j>0; res+=c[i][j],j-=lowb(j));
    23         return res;
    24     }
    25     typev query(int x1,int y1,int x2,int y2) {
    26         return sum(x2,y2)-sum(x2,y1-1)-sum(x1-1,y2)+sum(x1-1,y1-1);
    27     }
    28 } gx;
    29 int main(){
    30     int op,l,b,r,t,n;
    31     while(~scanf("%d",&op),op!=3){
    32         if(!op){
    33             scanf("%d",&n);
    34             gx.init();
    35         }
    36         else if(op&1){
    37             scanf("%d%d%d",&l,&b,&op);
    38             gx.add(l+1,b+1,op);
    39         }
    40         else{
    41             scanf("%d%d%d%d",&l,&b,&r,&t);
    42             printf("%d
    ",gx.query(l+1,b+1,r+1,t+1));
    43         }
    44     }
    45     return 0;
    46 }
    View Code

    end

  • 相关阅读:
    最近这段时间
    一元多项式的
    珍藏
    运行命令大全
    Google
    Windows Live Writer插件
    Word写论文的技
    安装Windows Live Writer后Ƃ
    比尔盖茨给人
    不经意的感悟
  • 原文地址:https://www.cnblogs.com/gaolzzxin/p/3884540.html
Copyright © 2011-2022 走看看