树状数组 线段树 笔记

news/2025/11/26 19:34:27/文章来源:https://www.cnblogs.com/qwqxwxpwp/p/19274387

写于 2023.11

树状数组

树状数组是维护 \(n\) 个数的前缀信息的一维数组。

其树型结构如下

这样的结构有着写法简单,常数小的特点。

其模板代码如下:

inline int lowbit(const int &x){//最后一个 '1' 对应的值 return x&-x;
}
void add(int pos,int val){//单点修改,将 a[pos] 的值增加 val while(pos<=n) t[pos]+=val,pos+=lowbit(pos);
}
int query(int pos){//查询[1,pos]的和 int sum=0;while(pos) sum+=t[pos],pos-=lowbit(pos);return sum;
}

除发挥其原本的前缀维护功能外( \(O(logn)\) 的前缀查询与单点修改),还可以用它来维护一个差分数组。这样,前缀和查询就变为了修改后的值的查询,弥补了差分数组只能“多次操作,一次查询”的短板。

将调用部分稍作修改即可完成 \(O(logn)\) 的区间修改与单点查询。

//此处t数组实际为一个差分数组
//[l,r]+val
add(l,val),add(r+1,-val);
//query: pos
printf("%d\n",query(pos));

其实,树状数组还可以方便地进行 \(O(logn)\) 的区间修改与前缀查询。

方法:对 query 与 add 函数进行修改,使其返回二次前缀和结果。

数学分析如下:

\[\begin{aligned} \sum^r_{i=l}\sum^i_{j=l} t_j &=\sum^r_{i=l}(r-i+1)\times t_i\\ &=\sum^r_{i=l}((r+1)\times t_i-i\times t_i)\\ &=(r+1)\times\sum^r_{i=l}t_i-\sum^r_{i=l}i\times t_i \end{aligned} \]

所以,我们可以维护两个树状数组,其意义分别为 \(t_i\)\(i\times t_i\) 的前缀。

代码如下:

int t1[maxn],t2[maxn];//t1为t的前缀,t2为i*t的前缀 
inline int lowbit(const int &x){return x&-x;}
void add(int pos,int val){int tem=pos;while(pos<=n) t1[pos]+=val,t2[pos]+=tem*val,pos+=lowbit(pos);
}
int query(int pos){int sum=0,tem=pos;while(pos) sum+=(tem+1)*t1[pos]-t2[pos],pos-=lowbit(pos);return sum;
}
void add_array(int l,int r,int val){add(l,val),add(r+1,-val);}
int query_array(int l,int r){return query(r)-query(l-1);}

简单包装为 class 可以有效增加代码的可读性。

inline int lowbit(const int &x){return x&-x;
}
class BIT{private:ll t[maxn];public:void add(int pos,ll val){for(int i=pos;i<=n;i+=lowbit(i)) t[i]+=val;}ll query(int pos){ll sum=0;for(int i=pos;i;i-=lowbit(i)) sum+=t[i];return sum;}
}

线段树

1 当不需要区间修改的线段树题目的做法

线段树是维护一个区间的树形结构。其维护的信息需要具有可加性(即通过组成大区间的两个小区间可以得到大区间的值)。

维护的信息具有可减性或其他可以使用树状数组的情况应用树状数组代替以获得更高的效率。

线段树的模板

struct node{int l,r;//other imformations
} t[4*maxn]; 
void pushup(node &u,node &l,node &r){//using l & r to make the new u//eg.//	u.val=l.val+r.val;
}
void build(int u,int l,int r){t[u]={l,r};if(l==r){// do something} else {int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(t[u],t[u<<1],t[u<<1|1]);}
}
void modify(int u,int pos,int val){if(t[u].l==t[u].r){// do modify} else {int mid=t[u].l+t[u].r>>1;if(pos<=mid) modity(u<<1,pos,val);else modify(u<<1|1,pos,val);pushup(t[u],t[u<<1],t[u<<1|1]);}
}
node query(int u,int l,int r){if(t[u].l>=l&&t[u].r<=r) return t[u];int mid=t[u].l+t[u].r>>1;if(r<=mid) return query(u<<1,l,r);else if(l>mid) return query(u<<1|1,l,r);node ans,ansl=query(u<<1,l,r),ansr=query(u<<1|1,l,r);pushup(ans,ansl,ansr);return ans;
}

此处 pushup 意为通过传入的后两个参数更新第一个位置的值,需要根据维护的具体信息修改。

build 的注释部分意为叶子结点的信息赋值,modify 的注释部分意为叶子结点的信息修改。这些部分均需要根据维护的信息改变。

有时维护的信息比较简单,query 可以不返回一整个结点,视题目而定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/977580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二分答案 序列划分

1.函数的返回和可行区应该是一样的 2.可行区选择与题目所求相同 右侧:最小化答案(如本题:寻找数字之和最大的段落最小的值) 左侧:最大化答案 #include <bits/stdc++.h> using namespace std; int n,m; vect…

Ai元人文:谦卑的舞台搭建者——岐金兰与她的未完成之歌

Ai元人文:谦卑的舞台搭建者——岐金兰与她的未完成之歌 在众声喧哗、人人争当先知的时代,我们遇见了一位独特的思考者——岐金兰。她自称为“全领域非专业人士”,却为智能文明的价值困境提出了一个名为“AI元人文”…

2025年下半年UVLED面光源、UVLED线光源、UV固化箱、UV解胶机、UV固化炉厂家Top 5推荐指南:选购必看榜单

摘要 2025年下半年,UV固化炉行业在工业4.0和绿色制造趋势下持续发展,广泛应用于电子封装、印刷包装等领域。本文基于市场调研和用户反馈,推荐五家UV固化炉品牌,排名不分先后,旨在为读者提供参考。表单内容仅供参考…

2025年江苏宣传片、网站建设、AI GEO、外贸站、小程序商城公司综合评测与精选服务商推荐

摘要 随着人工智能与地理空间信息技术的深度融合,2025年下半年AIGEO行业迎来快速发展期。本文基于市场调研和用户反馈,为您推荐五家值得关注的AIGEO平台服务商(排名不分先后),重点介绍各家的技术优势与服务特色。…

数据破界,价值共生:东软锚定AI时代民生新答卷

东软解决方案论坛 2025 于 11 月 20 日在福州这个数字中国的发源地召开。 这场连续举办二十余年的行业盛会,如同中国软件产业的“时光记录仪”:从早期聚焦软件技术突破,到中期探索数字化转型路径,再到如今锚定“数…

Ansible生产调优与故障排查全攻略 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年下半年UVLED面光源、UVLED线光源、UV固化箱、UV解胶机、UV固化炉厂家综合评测与选购指南

摘要 随着工业4.0智能化转型加速,UVLED面光源行业在2025年下半年迎来技术突破期,高功率、长寿命、节能环保成为市场主流需求。本文基于市场调研数据,为行业用户提供五家优质UVLED面光源品牌参考清单(排名不分先后)…

简单 DP 模型

luogu link 写于 2023.08.20 01 背包 朴素算法 //01背包模型 //给出m个物品及其价值,求在空间为T的背包中可以装的最大价值 #include<bits/stdc++.h> using namespace std; int ans[101][1001];//a[i][q]表示…

大模型(LLM)基本原理

大模型(LLM)基本原理Posted on 2025-11-26 19:25 Java后端的Ai之路 阅读(0) 评论(0) 收藏 举报什么是AI AI的核心目标是让机器能够执行通常需要人类智能的任务,例如语言理解、图像识别、复杂问题解决等。早期阶…

2025年江苏徐州板式家具、模压托盘、桥洞力学板、三聚氰胺饰面板品牌公司综合推荐指南:五大优质厂商深度解析

摘要 2025年下半年,板式家具行业持续创新,环保材料与智能化生产成为主流趋势。本文基于市场调研和用户反馈,整理出五家值得关注的板式家具品牌(排名不分先后),重点推荐江苏同芯木业。以下推荐表单仅供参考,实际…

Check Point R82 Gaia - 面向安全应用的下一代操作系统

Check Point R82 Gaia - 面向安全应用的下一代操作系统Check Point R82 Gaia - 面向安全应用的下一代操作系统 Quantum Security Gateway and Gaia 请访问原文链接:https://sysin.org/blog/check-point-r82/ 查看最新…

2025年下半年江苏网架、钢结构、光伏支架钢管、托辊钢管、汽车传动轴钢管厂家推荐指南:专业选择与权威解析

摘要 随着建筑行业向工业化、绿色化转型,网架钢结构在2025年下半年的江苏市场迎来新一轮发展高峰。本文基于行业调研和用户反馈,整理出一份网架品牌推荐榜单,排名不分先后,旨在为需求方提供参考。文末附有选择指南…

2025年11月压力容器、化工设备、锅炉、换热器、反应釜厂家怎么选:前五推荐指南

摘要 2025年反应釜行业在化工、石油等领域持续发展,技术创新和可靠性成为关键。本文基于第三方视角,提供2025年11月反应釜公司推荐前五榜单,排名仅为参考,不区分先后顺序,旨在帮助用户选择适合的服务商。榜单基于…

2025年下半年候车亭、公交站台、电子站牌、公交站牌、公交候车厅选购指南:十大优质供应商推荐

摘要 随着城市公共交通体系的不断完善,候车亭作为城市家具的重要组成部分,在2025年下半年的市场需求持续增长。本文整理了当前市场上较具实力的十家候车亭供应商信息,排名不分先后,仅供参考。特别提醒:本文提供的…

2025年下半年江苏徐州冷弯成型前冲孔生产线、C型钢自动抱焊机、钢结构码垛机、H钢冲孔液压设备、光伏支架冲孔机厂家选购指南与市场解析

摘要 随着建筑工业化进程加速,2025年下半年H钢冲孔液压设备市场需求持续增长。本文基于行业调研数据,为您推荐五家技术实力雄厚的设备供应商,排名不分先后,仅供参考。特别说明:本文推荐企业均经过严格筛选,但最终…

2025年下半年冷弯成型前冲孔生产线、C型钢自动抱焊机、钢结构码垛机、H钢冲孔液压设备、光伏支架冲孔机优质供应商推荐指南

2025年下半年,冷弯成型前冲孔生产线行业在智能制造和工业自动化推动下持续发展,市场需求增长显著。本文提供一份推荐榜单,基于第三方调研和用户反馈,列出五家值得考虑的公司,排名不分先后,仅供参考。表单内容旨在…

2025年下半年压力容器、化工设备、锅炉、换热器、反应釜厂家综合推荐指南:十大优质供应商深度解析

摘要 随着工业4.0时代的深入推进,2025年下半年换热器行业迎来新一轮技术革新与市场需求增长。换热器作为化工、石油、能源等领域的核心设备,其性能直接影响生产效率和能源利用率。本文基于市场调研和行业数据,整理出…

从“人工寻宝”到“秒级解析”:文档信息抽取技术重塑保险保单处理流程

在人工智能的语境下,传统的OCR(光学字符识别)技术仅仅完成了“看见”文字的第一步,却无法“理解”文字的语义与逻辑。面对海量、非结构化的汽车保险电子保单,真正的挑战在于如何让机器具备人类的认知能力,精准抽…