学长推荐的线段树做的差不多了(代码难度原因,一直拖到现在)
线段树的单纯题一般思维难度不是很大,但码力还是很坑的(要看维护的是啥)
1、线段树最直接的就是维护区间信息,比如区间最值、区间和,但这些题都不太可能会考了、
2、还可以维护图的信息,比如连通性(可能套并查集),最小权值树
3、也可以作为一个优化,如线段树加速dp (针对取最值的情况)
判断一个问题可不可以用线段树,
1、先要看数据范围,10^5 60%是线段树
2、然后看是否有多点询问或修改、或区间操作
3、看看区间之间能不能合并,怎么合并。
一般线段树都是合并比较难:
up: 注意分类讨论的思想、缩进不要搞反
down:注意标记下传的覆盖情况、优先级
一些线段树的思维套路:
1、只要上面的区间可以由且仅由子区间推出,相关性质也可以由子区间的保证来到父区间的保证。(局部凑整体)
2、合并时可能要用到贪心的思想,父区间必须从子区间选取所有信息来保证自己的信息。(性质连续性)
3、父区间和子区间信息规模一样(递归性)
4、分类讨论、保证信息完整性、可并性。(完整性)
5、有时候需要维护中间信息,用于合并(间接思维)
一些易错点:
1、子、父区间独立注意对应信息的位置
2、<<| 打成<< 直接用ll=<< rr=<<|来简化
3、信息合并时混乱
4、数组<<2
5、查询区间l>r崩溃
6、忘了赋初值
7、标记清0