zoukankan      html  css  js  c++  java
  • 【封装】二维BIT

    struct BIT{
        #define maxn 1000
    
        int n, m;
        int d1[maxn][maxn], d2[maxn][maxn], d3[maxn][maxn], d4[maxn][maxn], c[maxn][maxn];
    
        inline void init(int x, int y) { n = x, m = y; }
        inline int lowbit(int &x) { return x & -x; }
    
        void modify(int x, int y, int p){
            for(int i = x; i <= n; i += lowbit(i))
                for(int t = y; t <= m; t += lowbit(t)){
                    d1[i][t] += p,  d2[i][t] += p*y;
                    d3[i][t] += p*x,  d4[i][t] += p*x*y;
                    // 单点修改写法:c[i][t] += p;
                }
        }
    
        void Modify(int x1, int y1 ,int x2, int y2, int p){ 
            modify(x1, y1, p),  modify(x1, y2 + 1, -p);
            modify(x2 + 1, y1, -p),  modify(x2 + 1, y2 + 1, p);
        }
    
        int query(int x,int y){
            int ans = 0;
            for(int i = x; i; i -= lowbit(i))
                for(int t = y; t; t -= lowbit(t)){
                    ans += (x + 1) * (y + 1) * d1[i][t];
                    ans -= (x + 1) * d2[i][t] + (y + 1) * d3[i][t];
                    ans += d4[i][t];
                    // 单点修改对应查询:ans += c[i][t];
                }
            return ans;
        }
    
        int Query(int x1, int y1, int x2, int y2){
            return query(x2, y2) + query(x1 - 1, y1 - 1) - query(x1 - 1, y2) - query(x2, y1 - 1);
        }
    };
    你只有十分努力,才能看上去毫不费力。
  • 相关阅读:
    golang zip 压缩,解压(含目录文件)
    c3p0参数详解
    golang协程——通道channel阻塞
    乔恩与加菲猫引发的思考
    部署bugzilla(bugzilla+apache+mysql+linux)
    新的篇章
    SQL基础2
    SQL基础1
    引用
    const 对象默认为文件的局部变量
  • 原文地址:https://www.cnblogs.com/214txdy/p/14023966.html
Copyright © 2011-2022 走看看