A线段树
线段树专题
顾琪坤
1、简介:
打acm的时候,经常会碰到一类问题,比方给你n个数的序列,然后动态的更改某些数的值,然后又动态地询问某个区间的值的和或者其它乱七八糟的东西,对于单个更改或者询问,也许很轻松的就能写出O(n)的算法,但可能n比较大,可能有10的5次方的数量级,并且更改和询问的操作总次数q很多,q可能也是10的5次方的数量级,那么简单的写来的话,整个程序的复杂度是O(n*q),也就是10的10次方的数量级,这个复杂度在acm题目中是不可承受的,因为对于1s时限的题目,只能承受10的7次方的左右的数量级。
对于这类问题,就需要利用线段树这种数据结构了,这种神奇的数据结构能把上面那些问题在O(q*log(n))的时间内解决。
适用:
不单单有专门为线段树出的题,很多时候,线段树作为一种辅助出现,用来优化整个程序的效率,经常和动态规划搞在一起,比方求最长上升子序列的时候,普通的动态规划需要O(n^2)的复杂度,利用线段树优化就能降到O(n*log(n))的复杂度。
我的看法:
线段树,非常简单,但又因为它非常灵活,搞得题目可难可易,经常会有非常恶心的线段树题,想掌握它需要挺长时间的。
个人认为,在acm中线段树是一种非常简单的数据结构,非常形象也很容易理解。所每个acmer都应该掌握线段树的基本应用,而一个队伍中至少有一个人非常精通它,队伍的其他两人都应该会用它以及大概知道怎样的题可以用线段树解决。

线段树的结构:
线段树是建立在线段(或者说区间)基础上的树,树的每个节点代表一条线段[a,b](先规定一下,这里的线段是离散的点构成的,比方对于一个序列A1,A2,A3,A4,A5,A6,A7,,区间[3,5]代表的是{A3,A4,A5}这个意思,当然线段树也能搞连续的线段,这个与离散的大体相同,就少许地方不同,可自己联想)。
如果在线段[a,b]中,a==b了,说明这个节点只代表一个点了,它就是一个叶子节点。
如果线段[a,b],a!=b,说明这个节点代表的不值一个点,那么它会有两个儿子,左儿子代表的区间是[a,(a+b)/2],右儿子代表的区间是[(a+b)/2+1,b]。
这样的一个结构,一个区间每次都被折一半往下分,所以最多被分log(n)次就分到最低层。那么想要查找一个点或者区间的时候,顺着节点往下找,最多也就log(n)次就能找到。
2、线段树题目:
http://www.notonlysuccess.com/index.php/segment-tree-complete/
这个博客讲的比较完美了,做完就比较厉害了。
另外还有一些二维线段树丫,线段树的恶心应用之类的,想精通线段树的童鞋可以去研究一下。
3、国家集训队2004论文集 林涛:《线段树的应用》
下载:
http://pan.baidu.com/share/link?shareid=815396465&uk=2788351563&fid=325647541&qq-pf-to=pcqq.c2c
Ppt:
http://wenku.baidu.com/link?url=R36BjToJkM8prhbQeeTsYkURG2SQ7rXrtdl-ELEn9PvO_xXTY1k8DzhiQj1JvUXt6lsLPrMRiHym1LwGBrDXNioZj3VeOTVfwj4TntF1Ngy
A线段树的更多相关文章
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- 【BZOJ-2653】middle 可持久化线段树 + 二分
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1298 Solved: 734[Submit][Status][Discu ...
随机推荐
- JavaScript或jQuery模拟点击超链接和按钮
有时候我们需要页面自动点击超链接或者按钮,可以用js或者jQuery利用程序去点击,方法很简单,按钮或超链接代码如下: <a href="url" target=" ...
- BM算法 Boyer-Moore高质量实现代码详解与算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...
- codeforces 489B. BerSU Ball 解题报告
题目链接:http://codeforces.com/problemset/problem/489/B 题目意思:给出 n 个 boys 的 skills 和 m 个 girls 的 skills,要 ...
- July 18th, Week 30th Monday, 2016
Truth needs no color; beauty, no pencil. 真理不需要色彩,美丽无需涂饰. Most of the time, giving some color to trut ...
- css3学习总结9--CSS3过渡
CSS3 过渡 通过 CSS3,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果. 过渡属性 属性 描述 CSS transiti ...
- IE的安全性设定增加“我的电脑”的安全性设定
HKEY_CURRE-NT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones\,在右边窗口中找到DWORD值“ ...
- static_cast, dynamic_cast, const_cast
http://www.cnblogs.com/chio/archive/2007/07/18/822389.html 首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1 ...
- Xamarin.Android开发实践(八)
Xamarin.Android其他类型的服务 一.前言 前面我们已经学了关于服务的很多知识,但是对于真实的开发那些远远不够,通过这节我们将学习其他类型的服务,比如前台服务.IntentService和 ...
- node.js打开浏览器
通过nodejs的child_process识别环境, 用不同的CLI打开默认浏览器: var child_process = require("child_process"); ...
- java.lang.NoClassDefFoundError: org/apache/avro/ipc/Responder
文章发自:http://www.cnblogs.com/hark0623/p/4170174.html 转发请注明 java.lang.NoClassDefFoundError: org/a ...