# P10145 [WC2024] 线段树 题解## $\mathcal O(4^{n})$ 做法对于线段树上的一个节点区间 $[l,r)$ 我们连无向边 $(l,r)$,那么可以用加减表示出一个区间 $[L,R)$ 等价于 $L,R$ 两点联通。于是可以枚举每条边选或不选,用可撤销并查集判断两点是否联通,复杂度 $\mathcal O(2^{2n-1}\alpha(n))\approx\mathcal O(4^n)$。## 特殊性质做法特殊性质就是整个图联通。对与线段树上的每个区间,令 $f_o,g_o$ 分别表示区间联通与不连通的方案数,有:$$
f_o=2f_{ls}f_{rs}+f_{ls}g_{rs}+f_{rs}g_{ls}\\
g_o=f_{ls}g_{rs}+f_{rs}g_{ls}
$$在“线段树”上转移即可。----------------------------------思路分界线---------------------------------------## $\mathcal O(n^2m)$ 做法因为我们不再需要让整个图联通,所以不能简单的记录是否联通,由于每次增加一个大区间,总是把最左边的与最右边的联通,所以我们记 $f_o$ 表示区间联通,$g_{o,j}$ 表示区间不连通且 左端点最远与 $j$ 联通的方案数,则:$$
\begin{aligned}
&f_{ls}f_{rs}\to f_o\\
&f_{ls}g_{rs,j}\to f_o,f_{ls}g_{rs,j}\to g_{o,j}\\
&g_{ls,j}f_{rs}\to f_o,g_{ls,j}f_{rs}\to g_{o,j}\\
&g_{ls,j}g_{rs,k}\to f_o,g_{ls,j}g_{rs,k}\to g_{o,j}
\end{aligned}
$$对于第四组转移,区间 $(j,k)$ 在也无法与外界联通,所以转移时要求每个需要确定的区间 $[L,R)$ 要么都在里面,要么都在外面。最后答案就是 $f_{root}+g_{root,i}$,其中 $i$ 满足每个 $[L,R)$ 要么都在 $[0,i)$ 里面,要么都在 $[0,i)$ 外面,直接转移+枚举 $[L,R)$ 做到 $\mathcal O(n^2m)$。## $\mathcal O(n^2)$ 做法对于每个 $[L,R)$ ,使用异或Hash,随机一个权值 $v$,$q_L\oplus v\to q_L,q_R\oplus v\to q_R$,最后令 $V$ 表示 $q$ 的前缀异或和,那么第四组的转移限制相当于要求 $V_j=V_k$,这样避免了直接枚举限制。## $\mathcal O(n\log n)$ 做法直接将转移中的 $j$ 替换成 $V_j$ 那么转移变成了:$$
\begin{aligned}
&f_{ls}f_{rs}\to f_o\\
&f_{ls}g_{rs,j}\to f_o,f_{ls}g_{rs,j}\to g_{o,j}\\
&g_{ls,j}f_{rs}\to f_o,g_{ls,j}f_{rs}\to g_{o,j}\\
&g_{ls,j}g_{rs,j}\to f_o,g_{ls,j}g_{rs,j}\to g_{o,j}
\end{aligned}
$$可以用线段树合并解决,复杂度 $\mathcal O(n\log n)$。## 参考[笋 - 洛谷专栏](https://www.luogu.com.cn/article/gxwwzkhd)