Luogu7843 「C.E.L.U-03」布尔

题意: 有 个布尔变量 ,给出 个限制。

限制形如 (

一共 次询问,每次询问给出一个区间 。求最少把 划分成多少段连续的区间,使得每段里的限制都可以得到一组合法解。如果无论如何都无法得到合法解,输出 -1

,时限


限制是 的形式,但因为双向连边变得十分 simple,可以转为无向图连通性问题。

问题等价于:有一个有 个点的图,编号为 。给出 组无向边

连接后若存在 联通,则称区间 是不好的。

每次询问 至少划分为多少个好的区间。


为最大的 使得区间 是好的。在 上倍增即可回答询问。

接下来只需要求


考虑如何便捷地判定图是否合法。

对于 ,当 时记 ,当 时记 ,即一对中的另一个。

  • ①:维护每个联通块的点集,并启发式合并,可以做到均摊

    这种做法由于带有均摊,只能加,不能减和撤回,难以扩展。

  • ②:将原问题转化为:点有颜色(每个对子 颜色相同),若存在某个联通块有两个颜色相同的点,则不合法。

    维护两个并查集,一个是原图的并查集,一个是颜色的并查集。加边时,若前者成功后者失败,则说明不合法。

    这成功地将判定转化为了图的连通性问题。

  • ③:由于本题的特殊性,有更方便的方法。

    性质:根据(对称的)连边方式,“连通” 连通”。

    结论:在对 进行一次连边后,只需判定 是否连通。

    证明:(只证连接 的情况,另一种类似)

    假设 不连通,且此时存在新的 连通。

    说明 分别与 或者 连通。

    对于第一种情况,,由引理有

    因此有 ,矛盾。


不难发现 具有单调性,利用双指针可以将问题转化为:

  • 在右侧加入一条边

  • 在左侧删除一条边

  • 判定是否合法

在线动态图连通性可以做,但是太麻烦,常数又大,不可取。

算法一

考虑一类奇怪的 线段树分治+双指针 的算法。

表示加入了边 的图。初始时

若已经计算完了 ,准备计算 ,考虑 的增大,若向右加入 合法,则将其加入到 中,且令 加一。

此时 中的“存在”区间已经确定为 ,可以用线段树分治来给 加入 ,这样就不用考虑删除了。

线段树分治配合可撤回并查集,复杂度为

算法二

出题人用了一类奇怪的 决策单调性分治,即 表示求 且答案必在 内。

假设我们的并查集已经含有 。只需逐个加入 即可求出

分为两个子问题

对于前一个子问题,需要继承的是 ,先将原并查集恢复到 ,再加入 ,完事后再撤回即可。

对于后一个子问题,需要继承的是 ,这个在 的基础上再加入 就好。

这其实揭示了在贡献不能删除只能撤回(回滚)时,双指针配合决策单调性分治的方法。

根据决策单调性分治的经典分析,复杂度仍然是