树状数组的三种操作

[树状数组] 区间求和的三种模型 树状数组在区间求和问题上有很高的效率,尤其在非常困难的比赛中(数据量大,对时间限制很严格的比赛)能发挥非常大的作用,其各种复杂度都要比线段树低很多,而且其代码简洁优美……有关区间求和,主要有以下三个模型: (以下设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
};`

Qt制作大数据可视化大屏展示电子看板 Qt制作大数据可视化大屏展示电子看板 解决当前最火的大数据可视化大屏展示,整个项目通过Qt开发,集成了QML/QChart/ECharts及自定义控件等模块,所有的可视化控件都可以集成到其中。可以随意增加和减少模块,各个模块可以随意拖拽,整体可以个性化布局。模块标题栏可自定义,包括标题文本信息、文本颜色、宽度/高度、背景颜色、按钮个数等功能,满足各个样式需求。 实例中主要展示了现成的一些仪表盘... 阅读详情

相关推荐

数据库系统概论课后习题答案(第五版 王珊、萨师煊)

第1章 绪论 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表

早知晓的博客 11万+

树状数组数据结构

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

qq_37464878的博客 3008

嵌入式常见英文2500词总结

嵌入式常见英文总结

qq_28576837的博客 1万+

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

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

weixin_29095587的博客 787

ESP32实战:破解校园网WPA2-Enterprise认证的完整指南

本文详细介绍了如何使用ESP32开发板破解校园网WPA2-Enterprise认证的完整指南。通过硬件准备、环境搭建、核心代码实现及常见问题排查,帮助开发者解决企业级WiFi连接难题,特别适用于校园网环境下的物联网设备开发。

weixin_29194817的博客 457

AutoSAR配置与实践(深入篇)5.4 OS原理(下 )- 内存保护(MPU)

ECU可能由内部模块、第三方模块等各模块集成的。需求对每个模块所定义的安全等级可能有差异,需要考虑不同安全等级的模块和代码间减少相互干扰,防止程序错误传播。可以理解为包含Task、Alarm、Counter、Schedule table、ISRs、Event等基本对象的容器,用于隔离Task/Alarm等,进行内存保护。

nihaoljq2010的博客 3538

[python刷题模板] 树状数组

python刷题模板之树状数组

liuliangcan的博客 1485

Google Earth Engine :处理Sentinel-1 GRD SAR数据以估算田间尺度土壤湿度的工作流程(计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB))

本文介绍了利用Google Earth Engine (GEE)处理Sentinel-1 SAR数据估算田间土壤湿度的方法。工作流程包括:定义研究区域并筛选指定日期、轨道参数的Sentinel-1图像;预处理计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB),通过均值滤波降噪并去除无效像素;结合动态世界数据集掩膜水体/城市区域;最终导出时序GeoTIFF文件。DpRVIc基于双极化后向散射系数比,对植被结构敏感,而VVdB反映地表反射特性,二者结合可有效评估土壤湿度。该方法适用于农业监

此星光明博客 383

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

DICOM图像知识:深入详解DICOM的层级关系

解析DICOM的四个主要层级:Patient(患者)、Study(检查)、Series(序列)和SOP(服务-对象对),探讨它们之间的关系、各自的唯一标识符以及在实际应用中的用途

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 3305

基于FPGA的UDP 通信(一)

手头的FPGA开发板上有一个千兆网口,最近准备做一下以太网通信的内容。本文先介绍基本的理论知识。 FPGA芯片型号:xc7a35tfgg484-2 网口芯片:RTL8211 网络接口:RJ45

记录所学,分享知识,结识挚友 8361

树状数组教程(含习题)

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

m0_73146523的博客 2366

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

m0_73566014的博客 449

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

qq_55417658的博客 248

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【模板】树状数组

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

qq_29386809的博客 178

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

树状数组在区间求和问题上有大用,其三种复杂度都比线段树要低很多……有关区间求和的问题主要有以下三个模型(以下设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、付费专栏及课程。

余额充值