笋
FireBladeMaster · · 题解
线段树等价于三角剖分。
可以转化为对于结点
观察到一个线段树结点
即:若当前左端点与右端点不联通,则与左端点联通的点全都在与右端点联通的点的左侧(或者说,存在一个
考虑如何进行这个 dp。记
根据子结点选择
-
2g(lson)g(rson)\to g(o) -
g(lson)f(rson,j)\to g(o),g(lson)f(rson,j)\to f(o,j) -
g(rson)f(lson,j)\to g(o),g(rson)f(lson,j)\to f(o,j) -
f(lson,j)f(rson,k)\to g(o),f(lson,j)f(rson,k)\to f(o,j)
第四类转移
考虑用一个异或哈希的方式维护,对每个
此时我们发现转移中我们可以把
-
2g(lson)g(rson)\to g(o) -
g(lson)f(rson,j)\to g(o),g(lson)f(rson,j)\to f(o,j) -
g(rson)f(lson,j)\to g(o),g(rson)f(lson,j)\to f(o,j) -
f(lson,j)f(rson,j)\to g(o),f(lson,j)f(rson,j)\to f(o,j)
最后答案是
上线段树合并,复杂度