摘要: solution 对于树上的区间加操作,考虑转化为树上差分:对于两个节点 $x,y$,只需在 $sum_x+1,sum_y+1,sum_{LCA_{x,y}}-1,sum_{fa(LCA_{x,y})}-1$ 即可,只需一个倍增 LCA(好像不倍增也能过)。对于统计答案,由于线段树合并统计的是一个子 阅读全文
posted @ 2022-08-21 22:55 ClapEcho233 阅读(24) 评论(0) 推荐(0) 编辑
摘要: solution 考虑权值线段树合并:首先离散化,然后对于一个节点,我们将它的所有子树合并上来,并统计所有能力指数的个数(权值线段树基本操作),查询时只需查询 $p_i+1\sim n$ 的和即可 code #include <bits/stdc++.h> #define Tp template<t 阅读全文
posted @ 2022-08-21 22:54 ClapEcho233 阅读(17) 评论(0) 推荐(0) 编辑
摘要: solution 因为是先序遍历,所以对于一颗子树,它在交换子树后改变的只有跨越左右子树的逆序对。所以只需要在向上合并的过程中统计答案就好了。 code #include <bits/stdc++.h> #define Tp template<typename Ty> #define Ts temp 阅读全文
posted @ 2022-08-21 22:53 ClapEcho233 阅读(14) 评论(0) 推荐(0) 编辑
摘要: solution 由于出现了 询问当前与岛 x 连通的所有岛 所以考虑并查集加线段树合并。 B 操作:相当于将岛 $x$ 所在的线段树和岛 $y$ 所在的线段树合并,注意判断 $x$ 和 $y$ 是否在同一集合。 Q 操作:权值线段树基本操作,从岛 $x$ 所在的根节点向下递归,若 $sum_{li 阅读全文
posted @ 2022-08-21 22:52 ClapEcho233 阅读(9) 评论(0) 推荐(0) 编辑
摘要: solution 看见统计所有子树的信息,想到线段树合并。对于一个节点,我们将它的所有子树合并上来,并更新出现次数最多的颜色和编号(如果有出现次数一样则将编号相加)即可。 code #include <bits/stdc++.h> #define Tp template<typename Ty> # 阅读全文
posted @ 2022-08-21 22:51 ClapEcho233 阅读(20) 评论(0) 推荐(0) 编辑