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

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <set>
    #include <bitset>
    #include <queue>
    #include <stack>
    #include <string>
    #include <iostream>
    #include <cmath>
    #include <climits>
    
    using namespace std;
    const int MAX=1200;
    int c[MAX][MAX];
    int n;
    int LowBit(int t)
    {
        return t&(-t);
    }
    int Sum(int endx,int endy)//(1,1) 到 (endx,endy) 矩阵的和
    {
        int sum=0;
        int temp=endy;
        while(endx>0)
        {
            endy=temp;
            while (endy>0)
            {
                sum+=c[endx][endy];
                endy-=LowBit(endy);
            }
    
            endx-=LowBit(endx);
        }
        return sum;
    }
    void add(int addx,int addy,int num)//(x,y) 处增加num
    {
        int temp=addy;
        while (addx <=n)
        {
            addy=temp;
            while(addy<=n)
            {
                c[addx][addy]+=num;
                addy+=LowBit(addy);
            }
            addx+=LowBit(addx);
        }
    }
    int GetSum(int l,int b,int r,int t)//求 (l,b) (r,t) 矩阵的和
    {
        return Sum(r,t)-Sum(r,b-1)-Sum(l-1,t)+Sum(l-1,b-1);
    }
    
    int main()
    {
        int gg;
        int x;
        int a1,a2,a3,a4;
        scanf("%d",&n);
        while(scanf("%d",&x)!=EOF&&x!=3){
            if(x==1){
                scanf("%d%d%d",&a1,&a2,&a3);
                add(a1+1,a2+1,a3);
            }
            else{
                scanf("%d%d%d%d",&a1,&a2,&a3,&a4);
                cout<<GetSum(a1+1,a2+1,a3+1,a4+1)<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    K8s环境搭建
    opencv一些重要的函数或者类
    opencv的点的表示
    opencv矩阵的格式输出
    opencv矩阵运算(二)
    opencv矩阵运算(一)
    如何安装指定版本的Kubernetes
    使用minikube快速部署k8s集群
    Ceph 存储集群
    学习tcpIp必备的抓包工具wireshark
  • 原文地址:https://www.cnblogs.com/yigexigua/p/4162652.html
Copyright © 2011-2022 走看看