#4866. string

题目描述

有一个长度为 $n$ 的01串 $S$,有些位置被 $'?'$ 替代表示未知,有 $q$ 组限制:

每组限制形如 $abl$ ,表示 $S[a,a+l-1]=S[b,b+l-1]$ 。

求满足限制的情况下字典序最小的 $S$ 。

数据范围

$n,q \le 10^6$

题解

考虑暴力,可以暴力把相同的用并查集维护起来,这样是 $O(n^2)$ 的。

考虑倍增,把限制看成形如 $[i,i+2^j)$ 的 $\log$ 个区间,然后按 $j$ 从大到小合并,每次把连通性下放即可,具体来说就是两个联通的区间把它们的左端点合并,然后下放的时候分裂两个区间即可。这样是 $O(n\log^2n)$ 的。

考虑到相等的限制不需要不重,所以一个限制按照 $\text{RMQ}$ 一样分成两个限制即可,这样就是 $O(n\log n)$ 的。

posted @ 2020-06-08 10:39  xjqxjq  阅读(120)  评论(0编辑  收藏  举报