JOISC2015 D1T4(?
抽象题。
似乎区间修改不是很好做,发现取反有可逆性,考虑差分。
令:\(f_i\) 表示 \(s_i\) 和 \(s_{i-1}\) 是否不同 (\(\tt 0/1\))。
然后区间修改就变为了对 \(f_{l_i}\) 和 \(f_{r_i+1}\) 取反了。
观察得到初始的 \(f\) 有一个性质:只有 \(f_1, f_{a+1}, f_{a+b+1}, \cdots\) 为 \(1\),其余为 \(0\)。
\(f_1\) 为 \(1\) 不用管。关键是后面的 \(1\) 要消掉。
发现性质:\(f_x\) 和 \(f_y\) 取反,\(f_y\) 再和 \(f_z\) 取反,相当于 \(f_x\) 和 \(f_z\) 取反。
于是 \(f_{a+1}\) 和 \(f_{a+b+1}\) 取反,相当于 \(f_{a+1}\) 和其他的数取反,其他的数再和 \(f_{a+1}\) 取反。如图。

发现这样很像最短路的节点,考虑求最短路。
具体地,对于每一段 \(l_i, r_i\),考虑连一条连通 \(l_i, r_{i+1}\) 的无向边。
对于 \(f_1, f_{a+1}, f_{a+b+1}, \cdots\) 取反,可以改为 先两两之间取反再算出总代价。
由于两两之间取反仅有 \(3\) 种可能,\(f_{a+1}, f_{a+b+1}\) 和 \(f_{a+b+c+1}, f_{a+b+c+d+1}\) 取反,\(f_{a+1},f_{a+b+c+1}\) 和 \(f_{a+b+1},f_{a+b+c+d+1}\) 取反,\(f_{a+1}, f_{a+b+c+d+1}\) 和 \(f_{a+b+1},f_{a+b+c+1}\) 取反。
令 \(\text{dis}(x,y)\) 代表 \(x\) 到 \(y\) 最短路,只需要求出:
- \(\text{dis}(a+1,a+b+1)+\text{dis}(a+b+c+1,a+b+c+d+1)\)
- \(\text{dis}(a+1,a+b+c+1)+\text{dis}(a+b+1,a+b+c+d+1)\)
- \(\text{dis}(a+1,a+b+c+d+1)+\text{dis}(a+b+1,a+b+c+1)\)
之后求 \(\text{min}\) 即可。使用堆优化 Dijkstra,复杂度 \(O(n \log (a+b+c+d+e))\)。

浙公网安备 33010602011771号