Binary Indexed Tree 2D

树状数组(Binary Indexed Tree),看这一篇就够了 定义 根据维基百科的定义: A Fenwick tree or binary indexed tree is a data structure that can efficiently update elements and calculate prefix sums in a table of numbers. 也就是说,所谓树状数组,或称Binary Indexed Tree,... 阅读详情

    #include <cstdio>
    #include <cstdlib>
    #include <climits>
    #include <cstring>
    #include <algorithm>

    using namespace std;
    int map[1015][1015];

    void update(int x,int y, int n)
    {
        for(int i=x;i<=1005;i+=(i&(-i)))
        {
            for(int j=y;j<=1005;j+=(j&(-j)))
            {
                map[i][j]+=n;
            }
        }
    }

    int sum(int x,int y)
    {
        int s = 0;
        for(int i=x;i>=1;i-=(i&(-i)))
        {
            for(int j=y;j>=1;j-=(j&(-j)))
            {
                s+=map[i][j];
            }
        }
        return s;
    }

    int main(){
//        freopen("exp.in","r",stdin);
        int t, q;
        char s[3];
        int x1,x2,y1,y2,n1;
        scanf("%d",&t);
        for(int i=1;i<=t;i++)
        {
            printf("Case %d:\n",i);
            memset(map,0,sizeof(map));
            for(int j=1;j<=1005;j++)
                for(int k = 1;k<=1005;k++)
                    update(j,k,1);

            scanf("%d",&q);
            for(int j=1;j<=q;j++)
            {

                scanf("%s",s);
                if(s[0]=='S')
                {
                        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                        if(x1>x2)   swap(x1,x2);
                        if(y1>y2)   swap(y1,y2);
                        printf("%d\n",sum(x2+1,y2+1)+sum(x1,y1)-sum(x1,y2+1)-sum(x2+1,y1));
                }
                else if(s[0]=='A')
                {
                        scanf("%d%d%d",&x1,&y1,&n1);
                        update(x1+1,y1+1,n1);
                }
                else if(s[0]=='D')
                {
                        scanf("%d%d%d",&x1,&y1,&n1);
                        int v = sum(x1+1,y1+1)+sum(x1,y1)-sum(x1,y1+1)-sum(x1+1,y1);
                        n1=(n1-v>0)?v:n1;
                        update(x1+1,y1+1,-n1);
                }
                else if(s[0]=='M')
                {
                        scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&n1);
                        int v = sum(x1+1,y1+1)+sum(x1,y1)-sum(x1,y1+1)-sum(x1+1,y1);
                        n1=(n1-v)>0?v:n1;
                        update(x1+1,y1+1,-n1);
                        update(x2+1,y2+1,n1);
                }
            }
        }
//        fclose(stdin);
        return 0;
    }


Code From Hdu 1982

C/C++_五大常规算法_分治算法 分治法 一个装有 16 枚硬币的袋子,16 枚硬币中有一个是伪造的,伪造的硬币和普通硬币从表面上看不出有任何差别,但是那 个伪造的硬币比真的硬币要轻。现有给你一台天平,请你在尽可能最短的时间内找出那枚伪造的硬币。 常规思维: 每次从待比较的硬币中取两枚进行计较,如果天平平衡(相等)就继续取剩下的硬币进行比较 继续以上过程,直到找到硬币。 强者思维: 我们先将 16 枚硬币分为左右两个部分,各为 8 个硬币,分别称重,必然会有一半轻一半重,而我们要的就是轻的那组,重 的舍去。接下来我们继续对轻的进行五五分 阅读详情

相关推荐

Ubuntu 22.04远程桌面终极指南:从零配置RDP到解决黑屏问题

本文提供了一份Ubuntu 22.04远程桌面配置的终极指南,详细讲解了如何从零开始安装和配置RDP服务,并重点解决了连接后常见的黑屏问题。通过分析会话冲突、修复启动脚本及配置权限策略,帮助用户实现稳定、高效的远程桌面连接,优化分辨率、禁用锁屏,打造无缝的远程工作体验。

sony5的博客 1382

Binary Indexed Tree 2D 分类: ACM TYPE ...

#include <cstdio> #include <cstdlib> #include <climits> #include <cstring> #include <algorithm> using namespace std; int map[1015][1015];...

weixin_33968104的博客 142

【头歌实训:逆置顺序表】

根据提示,在右侧编辑器补充函数rev的代码,使用顺序表L的空间就地逆置L。},要求时间复杂度为O(n),空间复杂度为O(1)。第一行为顺序表逆置之前的元素。每个数据后一个空格。第二行为顺序表逆置之后的元素。每个数据后一个空格。本关任务:设计一个算法,将一个顺序表L的元素{a。第一行为顺序表中元素个数n。第二行为空格隔开的n个整数。开始你的任务吧,祝你成功!

guang_Lee的博客 998

树状数组(Binary Indexed Tree) 总结(ing)

推荐一篇很好的博客:http://www.cppblog.com/menjitianya/archive/2015/11/02/212171.html 一、树状数组的定义 基本定义:树状数组是利用二分的思想使得查询和修改的复杂度都为 log(n) 的数据结构,树状数组是通过前缀和思想,用来完成单点更新和区间查询的数据结构。 如上图,不难看出树状数组是一个不断地二分的过程。  如上图...

FFOYeah的博客 2047

海康线扫相机平场矫正实战:从原理到精准成像

本文深入解析了海康线扫相机平场矫正的原理与实战操作。通过拆解暗场与明场矫正的物理意义,揭示了其消除系统噪声、补偿像素响应不均的核心机制。文章详细指导了在海康相机上进行平场矫正的标准化流程、关键参数设置(如行高、灰度值控制)及常见误区,并提供了针对高行频匹配、环境稳定性维护等进阶调优技巧与问题排查指南,旨在帮助用户实现从原理理解到精准成像的跨越。

tomato的博客 790

极化码理论及算法研究6-SCL、CA-SCL及matlab仿真

极化码译码算法5——SCL/CA-SCL译码算法系列目录1、引言2、串行抵消列表(SCL)译码算法2.1、路径度量PM 系列目录 (如要找其他内容,欢迎访问我的主页寻找) #前言 #极化码概述 #极化码定义 #极化码编码 #极化码译码 #5G标准中极化码的编译码概述 #5G标准中极化码的编码 #5G标准中极化码的译码 #总结 1、引言 在上一节中,介绍了经典的SC译码算法的理论原理以及其matlab仿真代码,SC译码算法具有较低的译码复杂度,但是由于每个译码的比特信息都依赖于前面所有的比特信息的译码结果,得

1万+

LWC 62:742. Closest Leaf in a Binary Tree

LWC 62:742. Closest Leaf in a Binary Tree传送门:743. 742. Closest Leaf in a Binary TreeProblem: Given a binary tree where every node has a unique value, and a target key k, find the closest leaf node to

Demon-初来驾到 850

Google Earth Engine ——在 GEE 中计算面积含各类要素计算(土地分类为例)

在遥感应用中工作时,许多操作需要计算面积。例如,需要在监督分类后计算每个类所覆盖的面积,或者找出灾害后区域内受影响的面积。计算栅格和矢量的面积在大多数软件包中是一个简单的操作,但在 Google Earth Engine 中以稍微不同的方式完成 - 这可能会让初学者感到困惑。在这篇文章中,我将概述计算矢量和图像面积的方法。我们将涵盖以下主题,从简单到复杂。 特征的面积计算,即矢量数据 图像的面积计算(单类) 按类别计算图像的面积 按区域按类别计算图像的面积 按年按地区按类别计算图像的面积 准备数据

此星光明博客 4024

树状数组 Binary Indexed Trees

树状数组,英文名称是Binary Indexed Trees,又叫二分索引树。它是由二分索引方式构建的数组。由于其索引方式的特点,该数组中蕴含了一个树,树的每个结点都是是由数组元素构成,每个结点都表示了数组部分元素值的和。把数组和树联系起来,以数组的物理存储方式来表达树的逻辑架构,这和堆类似。 树状数组的构建方法: 假设原先的普通数组是这样的A[0],A[1],A[2]...A[n-1

LUCKYOJ 1337

【原创】汇川H5U PLC控制伺服的方法

6、在线调试-进入伺服调试,可以在本软件上进行调试,可以实现原点回归、正向点动、反向电动、使能(这里使能打开时触摸屏上的使能不能打开,会冲突)、复位、停止(如下图所示)。5、在原点返回设置中一般情况下对原点信号、正限位、负限位、原点返回方向、原点返回方式进行设置,其他设置默认不改(如下图所示)。3、在单位换算设置上只需要修改脉冲数和移动量(根据伺服配套导轨上名牌进行设置),其他设置默认不改(如下图所示)。11、双击后右边出现编辑框 在上半部分定义变量(IN、INOUT、OUT、VAR)(如下图所示)。

Qinmingyue13的博客 6665

机器学习(十九):梯度提升回归(GBR)

机器学习中的梯度提升回归算法原理与案例实战。

全栈川川 5156

308. Range Sum Query 2D - Mutable

308. Range Sum Query 2D - Mutable方法1:Binary Indexed Tree / Fenwich TreeComplexity方法2: segment tree Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper left...

wilzxu的博客 383

搭建AutoSAR开发环境

任何开发都需要一套开发环境,包括软硬件环境,笔者后续将介绍的是 NXP 的 S32K144 配套的开发板。接下来详细介绍怎么获取这些软硬件工具。仅供个人学习使用!

cfl927096306的博客 6111

Leetcode: Range Sum Query 2D - Mutable && Summary: Binary Indexed Tree

Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper left corner (row1, col1) and lower right corner (row2, col2). Range Sum Query 2D The above r...

weixin_30827565的博客 122

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[luogu4054 JSOI2009] 计数问题(2D BIT)

[luogu4054 JSOI2009] 计数问题(2D BIT) 传送门 Solution 2D BIT模板 Code //By Menteur_Hxy #include &lt;cmath&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;cstring&gt; ...

Tricksterism 198

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Binary Indexed Tree Template

//memset c 0 before use int c[MAXN]; //n -> update place //v -> update value void update(int n,int v) { for(;n<=MAXN;n+=(n&-n)) c[n]+=v; } //get the sum from 1 to n (BIT starts from 1) int read(i

Uni ACM 891

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Binary Indexed Trees

Archive Printable view Discuss this article Write for TopCoder Binary Indexed Trees  By boba5551 TopCoder Member Introduction Notation Basic idea Isolating the last digit Read c

pi9nc的专栏 2336

Binary indexed tree

Suitable for interval sum or prefix sum. Interval sum is just difference of two prefix sums. Compared with Segment Tree, Binary Indexed Tree requires less space and is easier to implement. BIT needs exactly n extra spaces, but Segment Tree needs approximat

UniversityGrass的博客 223

Binary Indexed Tree

比如你要查[1,7]的,你直接一看7的lowbit,1,那就算上c[7]=[7,7],然后跳到7-1=6去。再一看4的lowbit,4,那就算上c[4] = [1,4],然后跳到4-4=0去,到此跳出了树状数组,查询结束,返回和。例如你拆[1,13],那么递归到底部必然拆了[1,1] ⇒ [1,1],[1,2] ⇒ [2,2],[1,3] ⇒ [1,2] + [3,3]…那多出来的部分单算,比如[2:6],索引2上的1单独算就行了,复杂度O(n/B+B),由于B大概率比n小,那就是O(n/B))

lyh20021209的博客 987

树状数组(Binary Indexed Trees)树状数组详解(转载)

分类: 数据结构2013-09-10 21:15 124人阅读 评论(0) 收藏 举报 树状数组 目录(?)[+] 树状数组(Binary Indexed Trees) November 15, 2012 作者:Hawstein 出处:http://hawstein.com/posts/binary-indexed-trees.html 声

janvinal的专栏 740

树状数组(Binary Indexed Tree/Fenwick Tree)详解

树状数组是一个轻量级但功能强大的数据结构,特别适合处理前缀和查询和单点修改的问题。相比线段树,它的实现更简单,常数更小,但功能相对受限。在实际应用中,如果问题可以用树状数组解决,它通常是比线段树更好的选择。

mainjay 1216

Segment Tree, Interval Tree,Range Tree and Binary Indexed Tree

rt

zephyr_be_brave的专栏 1553

树状数组(Binary Indexed Trees)

作者:Hawstein 出处:http://hawstein.com/posts/binary-indexed-trees.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。 前言 本文翻译自TopCoder上的一篇文章: Binary Indexed Tr

我是传奇 1580

LeetCode10 Indexed tree

Binary Indexed Tree(Fenwick tree): 是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值(如果加入多个辅助数组则可以实现区间修改与区间查询) 原理: 树状数组是不需要建树的,通过lowbit来建立一个sum...

weixin_34092370的博客 137
上一篇: 博弈论入门小结
下一篇: short-path problem (Dijkstra)
梁千仞
博客等级 码龄15年 12粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值