线段树及例题(含题解)汇总(持续更新)

线段树及例题(含题解)汇总(持续更新)


该来的总要来,寒假没好好学,现在就得为寒假的懒买单(呜呜呜)。看了一天的线段树,虽然看懂还是很容易,毕竟就是一个特殊二叉树,但是实际应用却还是很复杂的,于是开始找些模板题敲敲,争取好好掌握这一数据结构。

至于不了解线段树基础知识的话,这有一大牛博客的传送门:传送门

这里简单介绍下线段树存储:线段树本身就是二叉树,故有:
1、指针存储
2、数组存储(重点讲下):由于线段树是完全二叉树,所以要么没有左右孩子,要么一定有两个,而且左孩子为2root,右孩子为2root+1,于是可以用数组存储,通过下标寻找
难点在于数组大小:基本上为结点数4倍足够线段树及例题(含题解)汇总(持续更新)_第1张图片

线段树使用于和区间统计有关的问题:
比如某些数据可以按区间进行划分,按区间动态进行修改,而且还需要按区间多次进行查询,

主要操作有:
点修改,点查询,区间查询,区间修改(较难)

常见题型有:
区间最值、区间求和、区间染色、矩形问题、区间k大数、二维线段树、三维线段树(小白瑟瑟发抖。。。)

用线段树解题,关键是要想清楚每个结点要存哪些数据(当然区间起终点,以及左右子节点指针是必须的(也可以通过数组代替))以及这些信息如何高效更新、维护、查询。不要一更新就更新到叶子结点,那样更新效率最坏就可能变成O(n)的了。

基本思路:
先建树,然后插入数据,然后更新,查询


一、区间最值

题目链接 考察点 题解代码
POJ 3264:Balanced Lineup(题目链接) 区间最大值与最小值之差(区间查询) 题解
hdu 1754:I Hate It(题目链接) 区间最值(点更新、区间查询) 题解
hdu 2795:Billboard(题目链接) 点更新 题解


二、区间求和

题目链接 考察点 题解代码
POJ 3468:A Simple Problem with Integers(题目链接) 区间和(区间更新,区间查询) 题解


三、区间染色

题目链接 考察点 题解代码


四、矩形问题

题目链接 考察点 题解代码


五、区间k大数

题目链接 考察点 题解代码


六、二维线段树

题目链接 考察点 题解代码

你可能感兴趣的:(数据结构与算法,线段树)