- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用树状数组解决几类问题
浙江省温岭中学 林希
树状数组作为一种实现简单、应用较广的高级数据结构,在OI界的位越来越重要,下面我来简单介绍一下树状数组和它的简单应用。
一、树状数组简介
树状数组(Binary Indexed Trees,简称BIT)可以方便地查询出一段区间中的数字之和。其查询和修改的时间复杂度均为O(N),并且是一个在线的数据结构,可以随时修改并查询。我接下来介绍树状数组的几个基本操作(s,t都是输入的数,s=t)
这道题目用线段树很容易可以解决,我就不多说了,那么如何用树状数组来解决呢?我们新增一个数组C[],其中C[i]=a[i-2k+1]+……+a[i](k为i在二进制形式下末尾0的个数)。根据定义我们可以得出一下这张表格:
i 二进制 K 1 (1)2 0 c[1]=a[1] 2 (10) 2 1 c[2]=a[1]+a[2]=c[1]+a[2] 3 (11) 2 0 c[3]=a[3] 4 (100) 2 2 c[4]=a[1]+a[2]+a[3]+a[4]=c[2]+c[3]+a[4] 5 (101) 2 0 c[5]=a[5] 6 (110) 2 1 c[6]=a[5]+a[6]=c[5]+a[6] …… 在这里,我们会发现k值的求解会有一些难度,这就引出了树状数组的第一个操作:低位技术Lowbit(k)。
对于Lowbit这里我提三种不同的写法1.Lowbit(k)=k and (k or (k-1))
2.Lowbit(k)=k and not (k-1)
3.Lowbit(x)=k and –k
然后我来分析引例的树状数组解法,为了可以更好地理解这种方法,读者可以根据以下这幅图来加以理解。
【操作2】修改操作:可以从C[i]往根节点一路上溯,调整这条路上的所有C[]即可,这个操作的复杂度在最坏情况下就是树的高度即O(lb)。?……C[pm], 则p1=k,而(li为pi在二进制中末尾0的个数)。
?例如A[1]……A[8]中,a[3] 添加x;
p1=k=3 p2=3+20=4
p3=4+22=8 p4=8+23=168
由此得出,c[3]、c[4]、c[8]亦应该添加x。
定理的证明如下:
【引 理】若A[k]所牵动的序列为C[p1],C[p2] C[pm], 且p1 p2…pm,则有l1 l2…lm(li为pi在二进制中末尾0的个数)。
证明:若存在某个i有li≥li+1,则,,即: (1)
而由Li=Li+1、Pi Pi+1可得 (2)
(2)矛盾,可知l1 l2 ……lm
定理2:p1=k,而p i+1=pi+2li
证明:p1 p2 …… pm 且C[p1],C[p2] C[pm]中包含a[k],因此p1=k。在p序列中,pi+1=pi +2li是pi后最小的一个满足li+1 li的数(若出现Pi+x比pi+1更小,则x2li ,与x在二进制中的位数小于li相矛盾)。Pi+1=pi+2li,li+1≥li+1。
由pi-2li+1≤K≤Pi可知,Pi+1-2li+1+1≤Pi+2li–2*2li+1=Pi– 2li+1≤K≤Pi≤P i+1 ,故Pi与pi+1之间的递推关系式为
P i+1=Pi+2li
【操作3】求数列的前n项和只需找到n以前的所有最大子树,把其根节点的C加起来即可。不难发现,这些子树的数目是n在二进制时1的个数,或者说是把n展开成2的幂方和时的项数,?因此,求和操作的复杂度也是O(l)。… +a[k] (l为k在二进制数中末尾0的个数),我们从k1=k出发,按:ki+1=ki-2lki(lki为ki在二进制数中末尾0的个数)
递推k2,k3,…,km (km+1=0)。
由此得出
S=c[k1]+c[k2]+c[k3] + … + c[km]
相信看了这两个操作的理论部分,读者应该有了一定的理解,下面给出这两种操作和其他一些重要操作的Pascal代码。
【操作1】低位技术:Lowbit(k)
Lowbit(k):即2进制数中从最低位开始连续0的位数的关于2的幂(k:Longint) :Longint;
Begin
Lowbit:=k and –k;
End;
【操作2】修改操作:Modify(k, D)
Modify(k, D):对数组 a[] 中的第个元素加上。为了维护 [] 数组,我就必须要把 [] 中所有管着 a[] 的 c[] 全部加上,这样才能随时以 O(l) 的复杂度进行 um(i) 的操作。而 owbit(k) 正是依次访问所有包含 a[] 的 c[] 的
您可能关注的文档
- 红外遥控信号解码.doc
- 第二章 2010年新加坡国际仲裁中心仲裁规则(中文).pdf
- 实验七 树及二叉树.doc
- 第二章 2009操作系统试卷-王雅琴.doc
- 单调速率调度算法RMS资料.docx
- 程序设计基础课后作业作业布置(2013春VB)(副本).doc
- 2014年新人教版二元一次方程组及不等式的期末复习.doc
- 房屋建筑学B卷答案教材.doc
- 第十一章 计算机网络技术基础知识汇总.doc
- 当事人陈述制度若干问题新探资料.pdf
- 2025年不饱和树脂材料行业深度研究报告.docx
- 2025年中国S弯数据监测报告.docx
- 2025年卫生知识健康教育知识竞赛-全民健康信息化标准知识竞赛考试近5年真题集锦(频考类试题)带答案.docx
- 2025至2030年NC水清亮光面漆项目商业计划书.docx
- 2025至2030年一体式法兰不锈钢球阀项目商业计划书.docx
- 2025至2030年中国安热静注射液行业投资前景及策略咨询研究报告.docx
- 2025至2030年中国异型磁贴市场分析及竞争策略研究报告.docx
- 2025至2030年中国预热计时器市场分析及竞争策略研究报告.docx
- 2025年PE线行业深度研究报告.docx
- 2025年中国一段式高温空气预热器市场现状分析及前景预测报告.docx
最近下载
- 热分布报告样本.pdf
- 2025年一建一级建造师建筑实务案例分析考点重点知识总结高分笔记.pdf VIP
- 手足口病的诊断与治疗课件.ppt VIP
- 会计法律法规答题答案.doc VIP
- 我国商业银行开展绿色信贷业务存在的问题和对策.docx VIP
- 医院消防安全除患整治攻坚行动工作总结8篇.docx VIP
- 《桃花源记》比较阅读85篇(历年中考语文文言文阅读试题汇编)(含答案与翻译)(截至2020年).doc
- 2025年北京东城区高三一模高考英语试卷试题(含答案详解).docx
- 2024潍坊护理职业学院招聘笔试真题及参考答案详解一套.docx VIP
- 年产300吨2-乙酰呋喃分离工段的工艺设计.docx
文档评论(0)