#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)$ 的。