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

    class TreeArraryTwo{
    public :
        const static int cmaxn = 1e3+200;
        int date[cmaxn][cmaxn];
        int xsz, ysz;
        
        void init(int size_x, int size_y) {
            xsz = size_x; 
            ysz = size_y;
            memset(date, 0, sizeof(date));
        } 
        
        inline int lowbit(int idx) { return idx & -idx; }
        
        void update(int x, int y, int val) {
            int i, j;
            for (i=x; i<=xsz; i+=lowbit(i))  // 注意 y x是相反的 ---> emmmm.  
                for (j=y; j<=ysz; j+=lowbit(j)) 
                    date[i][j] += val;
        }
        
        int getsum(int x, int y) {
            int i, j, res = 0;
            for (i=x; i>0; i-=lowbit(i)) 
                for (j=y; j>0; j-=lowbit(j)) 
                    res += date[i][j];
            return res;
        }
        
        /// 书写代码的时候要注意 原点!!!! 不是直接左上角 而是从原点的位置开始弄. 
        /// 下面的代码是原点在左下角的  和我们数学上的笛卡尔坐标系一致. 
        int getsum(int x1, int y1, int x2, int y2) { 
        //    return getsum(x2, y1) - getsum(x1-1, y1) - getsum(x2, y2-1) + getsum(x1-1, y2-1);  // 给定左上角 右下角 
            return getsum(x2, y2) - getsum(x1-1, y2) - getsum(x2, y1-1) + getsum(x1-1, y1-1);  //左下角 右上角 
        }
        
    };

    class TreeArraryTwo{public :const static int cmaxn = 1e3+200;int date[cmaxn][cmaxn];int xsz, ysz;void init(int size_x, int size_y) {xsz = size_x; ysz = size_y;memset(date, 0, sizeof(date));} inline int lowbit(int idx) { return idx & -idx; }void update(int x, int y, int val) {int i, j;for (i=x; i<=xsz; i+=lowbit(i))  // 注意 y x是相反的 ---> emmmm.  for (j=y; j<=ysz; j+=lowbit(j)) date[i][j] += val;}int getsum(int x, int y) {int i, j, res = 0;for (i=x; i>0; i-=lowbit(i)) for (j=y; j>0; j-=lowbit(j)) res += date[i][j];return res;}/// 书写代码的时候要注意 原点!!!! 不是直接左上角 而是从原点的位置开始弄. /// 下面的代码是原点在左下角的  和我们数学上的笛卡尔坐标系一致. int getsum(int x1, int y1, int x2, int y2) { //return getsum(x2, y1) - getsum(x1-1, y1) - getsum(x2, y2-1) + getsum(x1-1, y2-1);  // 给定左上角 右下角 return getsum(x2, y2) - getsum(x1-1, y2) - getsum(x2, y1-1) + getsum(x1-1, y1-1);  //左下角 右上角 }};

  • 相关阅读:
    【转】linux常用命令
    【转】C++三大特性
    插入排序
    shixi
    【转】TCP协议
    【转】排序算法稳定性
    面筋BD
    斐波那契数列
    【面试题】D
    【学习笔记】OI模板整理
  • 原文地址:https://www.cnblogs.com/cgjh/p/9348993.html
Copyright © 2011-2022 走看看