线段树2 动态开点习题
1.Promotion Counting
查询以x为根的子树上有多少节点权值大于x
类似于查询排名?权值线段树/平衡树
线段树维护区间,使用DFS序把树上操作转化为区间操作
在每一棵子树访问完毕后将这棵子树向上合并到父节点对应线段树即可
2.魔法少女LJJ
线段树合并裸题吧... 码力题,思路浅显
1.开个点,权值为q
2.将a合并到b所在的连通块(大线段树)中
Update1:采用并查集路径压缩快速查找所属连通块同时减少
3&4.维护权值线段树修改即可
5.显然权值线段树/平衡树
6.这里前面用到的q可以开成64位维护乘积
Update2:ll可能会爆,维护乘积大小关系可以转化成 \(log_2 q\) 的形式比大小
7.啊这...权值线段树的极大区间解决
(8&9大致想了下似乎可以拆分线段树?)
挺练码力...
3.大根堆
这个节点选或不选由祖先的情况决定
将选父节点和不选父节点的情况作比较,如果不选父优就不选,选父优就选
这个时候就要按照第1题拍扁树对应建立权值线段树了
这时候要先合并线段树,然后查询选父节点和不选的个数较大值
最终的答案就是整棵子树中最优的情况
Update4:
4.永无乡
思路比较浅显,让我怀疑难的不是题是线段树合并这个知识点本身
对于每个连通块维护一棵权值线段树
对于连边操作直接并查集合并维护联通块
合并连通块同时合并线段树
查询第k大重要时先判断合法,如果小于0或大于节点个数puts(-1)
即可
我想到的方法是赋初始权值然后权值线段树查找第k大即可
注意审题