中学生论文浅谈线树的应用.pptxVIP

中学生论文浅谈线树的应用.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中学生论文浅谈线树的应用

浅谈线段树的应用 余岳 线段树节点上可能有许多域,通常可将它们分为以下三类: 1.结构域:维护线段树自身结构 2.答案域:表示答案 3.标记域:表示修改的效果 域的分类 要求一:标记域方便高效修改答案域 存在高效的算法update让标记更新答案。 要求二:答案域方便高效合并 存在高效的算法merge使得当前节点的答案可以由左右孩子的答案合并得到 要求三:标记域方便高效下传 存在高效的算法link计算出一个新标记mark可以完整表示经过mark1、mark2两次标记之后的效果。 对域的设计要求 Data=update(data,mark) Data’=merge(left^.data,right^.data) mark=link(mark1,mark2) 由于可以将程序的模板化,在利用线段树解题时,我们只需要讨论如何设计标记域、答案域,以及如何写出update、merge和 link 这三个函数。 所以,我们要解决以下问题: 1. 需要维护哪些答案域?这些答案域能否高效合并? 2. 需要维护哪些标记域?这些标记域能否高效下传、高效更新答案域? 我们要解决的问题 题目描述: 输入两个个长为n的数列x[i],y[i],维护m个操作,操作分为三类: 1.对于某一区间将其中的y[i]加到x[i]上(即x[i]+=y[i]) 2.对于某一区间将其中的x[i]加到y[i]上(即y[i]+=x[i]) 3.询问某一段中所有的x[i]*y[i]的和 要求高效地在线回答询问。 双数组问题 双数组问题 Link函数可以根据上面的示意图写出(或者用矩阵乘法) 双数组问题 双数组问题 Type datatype=record sxy,sx2,sy2:longint; end; marktype=record a,b,c,d: longint end; function update(data:datatype; mark:marktype):datatype; update.sxy:=a*c*sx2+b*d*sy2+(a*d+b*c)*sxy; update.sx2:=a*a*sx2+b*b*sy2+2*a*b*sxy; update.sy2:=c*c*sx2+d*d*sy2+2*c*d*sxy; function merge(a,b:datatype):datatype; merge.sxy:=a.sxy+b.sxy; merge.sx2:=a.sx2+b.sx2; merge.sy2:=a.sy2+b.sy2; function link(x,y:marktype):marktype; link.a:=x.a*y.a+x.c*y.b; link.b:=x.b*y.a+x.d*y.b; link.c:=x.a*y.c+x.c*y.d; link.d:=x.d*y.d+x.b*y.c; 输入长度为n的数列a[i]。维护m次操作,每次操作可以: 1. a[l]…a[r]每一项都加一个数c 2.求F[ a[l] ]+F[ a[l+1] ]+…F[ a[r] ],答案取模输出 其中F[i]表示斐波那契数列。即F[0]=F[1]=1,F[n+2]=F[n+1]+F[n]。 斐波那契数列问题 斐波那契数列问题 斐波那契数列问题 斐波那契数列问题 预处理:O(nlogn) 单次询问、修改:O ((logn)2) type datatype=record sa,sa2:longint; end; marktype=longint; matrix=array[1..2,1..2] of longint; const yuan:matrix=((0,1),(1,1)); operator *(a,b:matrix)c:matrix; //矩阵乘法,略 operator **(a:matrix; b:longint)c:matrix; //矩阵快速幂,略 function update(data:datatype; mark:marktype):datatype; tmp:=yuan**mark; update.sa:=(data.sa*tmp[1,1]+data.sa2*tmp[1,2]) mod modular; update.sa2:=(data.sa*tmp[2,1]+data.sa2*tmp[2,2]) mod modular; function merge(a,b:datatype):datatype; merge.sa:=a.sa+b.sa; merge.sa2:=a.

文档评论(0)

130****9768 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档