- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【完全版】线段树
很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还
去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉得当时的代码风格实在是太丑了,
很多线段树的初学者可能就是看着这篇文章来练习的,如果不小心被我培养出了这么糟糕的风格,
实在是过意不去,正好过几天又要给集训队讲解线段树,所以决定把这些题目重新写一遍,顺便把
近年我接触到的一些新题更新上去~;并且学习了splay等更高级的数据结构后对线段树的体会有
更深了一层,线段树的写法也就比以前飘逸,简洁且方便多了.
在代码前先介绍一些我的线段树风格:
maxn是题目给的最大区间,而节点数要开4倍,确切的来说节点数要开 于maxn的最小
2 的两倍x
lson和rson分辨表示结点的左儿子和右儿子,由于每次传参数的时候都固定是这几个变
量,所以可以用预定于比较方便的表示
以前的写法是另外开两个个数组记录每个结点所表示的区间,其实这个区间不必保存,一
边算一边传下去就行,只需要写函数的时候多两个参数,结合lson和rson的预定义可以很
方便
PushUP(intrt)是把当前结点的信息更新到父结点
PushDown(intrt)是把当前结点的信息更新给儿子结点
rt表示当前子树的根(root),也就是当前所在的结点
整理这些题目后我觉得线段树的题目整体上可以分成以下四个部分:
单点更新:最最基础的线段树,只更新叶子节点,然后把信息用PushUP(intr)这个函数更新
上来
o hdu1166 敌兵布阵
题意:O(-1)
思路:O(-1)
线段树功能:update:单点增减 query:区间求和
?View CodeCPP
1 #include cstdio
2
3 #define lsonl, m, rt1
4 #define rsonm+1,r, rt1|1
5 const int maxn = 55555;
6 int summaxn[ 2];
7 void (int ) {
PushUP rt
8 [ ] = [ 1] + [ 1|1];
sumrt sumrt sumrt
9 }
10 void (int int int ) {
build l, r, rt
11 if ( == ) {
l r
12 scanf(%d [ ]);
, sumrt
13 return ;
14 }
15 int = ( + ) 1;
m l r
16 build lson( );
17 build rson( );
18 ( );
PushUPrt
19 }
20 void (int int int int int ) {
update p, add, l, r, rt
21 if ( == ) {
l r
22 [ ] += ;
sumrt
您可能关注的文档
最近下载
- 中医养生预防脑血管疾病的措施(3).pptx
- 教育部2024年专项任务项目(高校辅导员研究)申请评审书《增强高校辅导员与学生谈心谈话的针对性和实效性研究》.docx VIP
- YBJ-PS03-2004埋地无压预制混凝土排水圆形管管基及接口.pdf
- 家校社协同育人教联体典型案例(幼小中).doc
- 智慧教育双师课堂解决方案.pdf
- DL∕T 1949-2018 -火力发电厂热工自动化系统电磁干扰防护技术导则.pdf
- 2023云南昆明空港投资开发集团招聘7人考前自测高频考点模拟试题(共500题)含答案详解.docx
- 营销三大法宝-销售带动配合-PPT课件.ppt
- 人教版本历史七下第3课(开元盛世)课件3.ppt
- 2025考研英语一真题及答案.pdf
文档评论(0)