树状数组的三种操作

[树状数组] 区间求和的三种模型 树状数组在区间求和问题上有很高的效率,尤其在非常困难的比赛中(数据量大,对时间限制很严格的比赛)能发挥非常大的作用,其各种复杂度都要比线段树低很多,而且其代码简洁优美……有关区间求和,主要有以下三个模型: (以下设a[1…n]为一个长为n的序列,初始值全为0)1、改点求段型:即对于序列A有以下操作: 求整段区间的和:给定i,计算a1+a2+…+ai 修改单点:给定x和c,执行ax += c 这是最 阅读详情

直接贴代码

一、改点求段
namespace BIT
{
#define N 100000
#define lowbit(a) ((a)&(-a))
int c[N],num;
void init(int n){num=n;}
inline void add(int x,int a)
{
int xx=x;
while(xx<=num)c[xx]+=a,xx+=lowbit(xx);
}
inline int sum(int x)
{
int sum_=0,xx=x;
while(xx)sum_+=c[xx],xx-=lowbit(xx);
return sum_;
}
inline int sum(int l,int r)
{
return sum(r)-sum(l-1);
}
#undef N
#undef lowbit
};

二、改段求点
namespace BIT
{
#define N 100000
#define lowbit(a) ((a)&(-a))
int c[N],b[N],num;
void init(int n){num=n;}
inline void add(int l,int r,int x)
{
for(int i=l-1;i;i-=lowbit(i))b[i]-=x;
for(int i=r;i;i-=lowbit(i))b[i]+=x;
}
inline int sum(int x)
{
int s=0;
for(int i=x;i<=num;i+=lowbit(i))s+=b[i];
return s;
}
#undef N
#undef lowbit
};

三、改段求段`

namespace BIT
{
#define lowbit(x) ((x)&(-x))
#define cl(x) memset(x,0,sizeof(x))
int b[100010],c[100010],maxn;
void init(int n){maxn=n;cl(b);cl(c);}
inline void add(int l,int r,int x)
{
for(int i=r;i;i-=lowbit(i))b[i]+=x;
for(int i=r;i<=maxn;i+=lowbit(i))c[i]+=x*r;
if(l>1)
{
for(int i=l-1;i;i-=lowbit(i))b[i]-=x;
for(int i=l-1;i<=maxn;i+=lowbit(i))c[i]-=x*(l-1);
}
}
inline int sum(int x)
{
int s=0;
if(x>1)
{
for(int i=x;i<=maxn;i+=lowbit(i))s+=b[i];
s*=x;
for(int i=x-1;i;i-=lowbit(i))s+=c[i];
}
return s;
}
inline int sum(int l,int r)
{
return sum(r)-sum(l-1);
}
#undef lowbit
#undef cl
};`

R爬虫RSelenium环境搭建及简单应用 这是鄙人自己实践的一种可行的环境搭建,我会尽量详细的写下大家步骤。 阅读详情

相关推荐

GD32F103入门实践(一)配置环境,搭建工程模板,烧写程序

写在前面 本系列博客是我初学GD32F103的操作实录,我个人是个小白,在学习过程中真的也遇到了不少坑,因此我希望能记录下来,帮助到同样踩坑的你。 我的芯片是GD32F103ZE,软件是Keil,烧写用的是JLink。 材料准备 首先我在兆易创新官网(兆易创新),下载相关的文件。点击资料下载,在搜索框里输入“GD32F10”可以得到相关的资料,其他芯片类似。比较重要的是GD32F10x AddOn和GD32F10x Firmware Library(固件库),这两个必须下载。 下载Keil MDK5,这

qq_41208487的博客 3万+

树状数组数据结构

1.树状数组概念 树状数组简单来说就是仅通过一个数组来描述一棵树或一个森林。数组中每个元素只存储着树中对应节点存储的信息,不存储描述树的层次结构的信息。 2.普通树的存储 对于一棵普通的树,在《数据结构》严蔚敏版中提到可以使用如下方法进行存储: 2.1 父节点表示法 用一个数组中存储节点信息,节点信息包括节点存储数据和父节点编号。 struct Node { int data; // 节点存储的数据 int parent; // 节点对应的父节点的编号 } struct Tree {

qq_37464878的博客 3008

【全开源】教育培训微信小程序源码(FastAdmin+ThinkPHP+Unipp)

教育培训微信小程序源码以其便捷性、互动性、安全性等优势,成为了教育培训行业的新宠。随着移动互联网技术的不断发展,教育培训微信小程序源码将继续引领未来学习趋势,为学员提供更加优质、高效的学习体验。同时,教育培训机构也应积极拥抱小程序技术,利用源码打造具有自身特色的学习平台,提升品牌影响力和市场竞争力。

2401_84414018的博客 2102

python 树状数组_【算法日积月累】19-高级数据结构:树状数组

树状数组能解决的问题树状数组,也称作“二叉索引树”(Binary Indexed Tree)或 Fenwick 树。 它可以高效地实现如下两个操作:1、数组前缀和的查询;2、单点更新。下面具体解释这两个操作。1、数组的前缀和查询首先看下面这个例子,了解什么是数组的前缀和查询。例1:已知数组。1、求索引 至索引 的所有元素的和;2、求索引 至索引 的所有元素的和;3、求索引 至索引 的所有元...

weixin_29095587的博客 787

得物APP破解

本文介绍了得物App(版本4.74.5)的逆向破解过程,重点分析了绕过强制更新、抓包技巧以及破解newSign参数的详细方法。首先通过断网再联网的方式绕过强制更新,然后使用SocksDroid进行抓包分析,发现首页推荐接口需要newSign参数。通过反编译定位到RequestUtils.c方法,利用Frida进行Hook验证,最终解析出newSign的生成逻辑:将请求参数加入固定字段后排序拼接,再进行MD5加密生成签名。文中提供了完整的Hook脚本和签名算法分析,仅供学习移动安全技术参考。

m0_74653634的博客 3498

【前端】【面试】【业务场景】前端如何获取并生成设备唯一标识

问题:前端如何获取并生成设备唯一标识?核心要点:浏览器原生信息有限,但通过组合多个维度可生成设备指纹(Device Fingerprint),用于唯一标识设备。常见方式浏览器信息(User-Agent)屏幕与系统参数本地存储标识(localStorage / cookie)第三方指纹库(如 FingerprintJS)方式优点缺点手动组合指纹实现简单不稳定,识别率低持久化强容易被用户清除识别率高、稳定性好依赖第三方库IP 地址识别网络识别粗略共享网络环境下重复可能大。

qq_59344127的博客 1796

[python刷题模板] 树状数组

python刷题模板之树状数组

liuliangcan的博客 1485

华为FusionCharge 720kW液冷直流快充桩主电流全路径深度详解

本文档详细介绍了华为FusionCharge 720kW液冷分体式直流充电系统的主电流路径全链路解析,适用于配套DS720-720LCNA1充电主机及DT600L1-CNA1液冷终端、DT250N2-CNA1自然冷终端的运维工作。内容涵盖从电网交流输入到电动汽车充电的全过程,重点解析交流门、整流正门、主控正门等五大柜门区域的核心元器件分布及功能,包括额定参数、安全规范、故障排查等关键运维知识。操作人员需持有高压电工证并通过专项培训,作业时必须严格遵守断电验电、穿戴PPE防护装备等安全红线。文档通过16个关键

2401_84939870的博客 753

python 树状数组_树状数组(Binary Indexed Tree) 总结

1.“树状数组”数据结构的一种应用对含有n个元素的数组(a[1],...,a[k],...,a[n]):(1)求出第i个到第j个元素的和,sum=a[i]+...+a[j]。进行j-i+1次加法,复杂度为O(j-i+1)(2)任意修改其中某个元素的值。使用数组下标可以直接定位修改,时间复杂度为O(1)对于同时支持上述两种操作的系统中,求和操作(1)求任意连续个数组元素和的平均时间复杂度为O(n),...

weixin_32515349的博客 720

ROS2实战:打造智能巡检机器人的关键技术与实现

本文详细介绍了基于ROS2和Navigation2构建智能巡检机器人的完整实战流程。通过设计主从协作的事件驱动架构,实现了机器人在已知地图中的自动导航、定点语音播报和环境图像采集功能。文章涵盖了从环境搭建、仿真配置到核心控制节点、语音服务与图像记录模块的代码实现,为开发者打造实用的自动巡检机器人提供了清晰的技术指南。

weixin_29031057的博客 225

Arduino跑通ssd1306_spi显示屏

代码首先,您需要下载两个库:● Adafruit GFX库,这是核心图形库,提供了一组通用的图形基元(点、线、圆等)。它需要与特定于硬件的库对应。● Adafruit SSD-1306 OLED显示库,这是基于SSD1306驱动程序的OLED显示器的库。解压缩这两个库并将它们添加到Arduino库文件夹中,然后运行Arduino IDE并从OLED库中打开SPI示例。

Leo ICer的博客 1494

树状数组教程(含习题)

包含了常见的所有树状数组的题型,并对一些相关原理进行剖析,lowbit的实现原理等基础原理请参考其它文章,这里不再赘述。本文适合于对树状数组有初步了解的读者,希望能对你们有所帮助orz

m0_73146523的博客 2366

YOLOv12环境配置,手把手教你使用YOLOv12训练自己的数据集和推理(附YOLOv12网络结构图),全文最详细教程

YOLO 系统尊嘟太卷了吧,YOLOv11 还没完明白,YOLOv12 就重磅来袭,YOLOv12 是由纽约州立大学联合中科院在 2025年2月19 日发布,从 YOLOv12 论文题目我们大概就知道做了那些更新 ,下图是YOLOv12 在 COCO 数据集上的性能表现引入区域注意力机制(area-attention):通过引入十字形窗口自我注意机制,沿水平和垂直条纹计算注意力机制,纵横交错的注意机制。如下图所示,区域注意力采用最多简单的等分方法,将特征地图垂直或水平划分为 L 个区域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6万+

树状数组的三种操作+例题应用

在写算法题时进场能碰到要求求一段区间的数据和或者修改区间内某一个数据,如果使用数组纯累加的话,求和:O(N),修改:O(1),如果有多组查询可能会TLE。而前缀和刚好相反,求和:O(1),修改:O(N),同样的如果遇到多组修改依然容易TLE。而树状数组刚好是一种折中的数据结构,它让求和与修改的时间复杂度都为O(logN)。区间查询,单点修改;区间修改,单点查询;区间修改,区间查询。

m0_73566014的博客 449

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

三种区间操作:差分前缀和、线段树和树状数组

区间操作的思路有:差分、前缀和、线段树和树状数组在更低的时间复杂度下完成一个连续区域的加减问题。

qq_55417658的博客 248

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【模板】树状数组

今日起开始在优快云更新博客,先把以前写好的很多模版分享一下。 本文是平常常用的三种树状数组 分别实现: 区间加减,单点查询 区间查询,单点加减 二维树状数组的矩阵求和,矩阵查询 主要原理分别为: 裸树状数组 差分 树状数组套树状数组 1:区间加减,单点查询 //树状数组基础版,实现区间询问以及单点修改(单点询问左转树状数组ex) #include &lt;cstdio&gt;...

qq_29386809的博客 178

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

树状数组区间求和三种模型

树状数组在区间求和问题上有大用,其三种复杂度都比线段树要低很多……有关区间求和的问题主要有以下三个模型(以下设A[1..N]为一个长为N的序列,初始值为全0): (1)“改点求段”型,即对于序列A有以下操作: 【1】修改操作:将A[x]的值加上c; 【2】求

mr_lee 8386

二分查找突破上下限,树状数组的三种应用。

result=lower_bound(nums.begin(),nums.end(),new_val); result=upper_bound(nums.begin(),nums.

码码要洗手 770

【数据结构】二维树状数组

LOJ 上二维树状数组的三道板子题

本居小铃的博客 1229

树状数组的元素修改和查询

将区间[l, r]的每一个元素都加上k, 运用差分的思想相当于add(l, k), add(r + 1, -k)。区间修改同上面一样运用差分的思想,运用差分树状数组表示的是差分数组,如何用差分数组进行区间查询呢?而单点修改的区间查询[l, r]的区间值表示为get_sum(r) - getsum(l - 1);单点修改是对一个点的数值进行修改,但是t1树状数组中的每个元素的值存的是前缀和,和前缀和的思维一样,我们运用差分的思想。而求出某个数的值则转化为这个数原始的值加上这个数的变化。

2301_79322308的博客 723

树状数组的总结

仅是个人总结,刚开始学还是看别的博客比较好。我推荐一个比较好的。https://blog.youkuaiyun.com/qq_39553725/article/details/76696168 一:单点修改,区间查询(常见树状数组的基本用法) int a[maxn],c[maxn],n;//a是记录原值的数组,c就是树状数组,n表示的是个数 int lowbit(int x){ return x&amp...

qq_41755258的博客 188

树状数组

定义 树状数组(Binary Indexed Tree(BIT), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和(维护前缀和), 但是每次只能修改一个元素的值。 逻辑结构上是一棵树,但实际上只是个数组。 树状数组和线段树:树状

slime_kirito的专栏 421

树状数组三种模型

树状数组在区间求和问题上有大用,其三种复杂度都比线段树要低很多……有关区间求和的问题主要有以下三个模型(以下设A[1..N]为一个长为N的序列,初始值为全0): (1)“改点求段”型,即对于序列A有以下操作: 【1】修改操作:将A[x]的值加上c; 【2】求和操作:求此时A[l..r]的和。 这是最容易的模型,不需要任何辅助数组。树状数组中从x开始不断减lowbit(x)(即x&amp...

weixin_34032621的博客 69

树状数组区间求和三种模型 [转]

原帖地址:http://blog.youkuaiyun.com/q573290534/article/details/6664454 树状数组在区间求和问题上有大用,其三种复杂度都比线段树要低很多……有关区间求和的问题主要有以下三个模型(以下设A[1..N]为一个长为N的序列,初始值为全0):(1)“改点求段”型,即对于序列A有以下操作:【1】修改操作:将A[x]的值加上c;【2】求和操作:求此时A[l..

DGY01的博客 423
上一篇: Emacs 配置文件
下一篇: POJ 3321
Vectorxj
博客等级 码龄11年 35粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值