【2020.11.24提高组模拟】变换 (transform) 题解
【2020.11.24提高组模拟】变换 (transform) 题解
题意描述
给一个大小为\(n\)的\(01\)环\(A\),点编号为\(0,1,\dots,n-1\)。每一个点\(i\)都与\((i+1)\texttt{ mod }n\)之间有一条边。
初始时,每个点有一个\(0\)或\(1\)的权值。
定义一次变换:对于每个点,若与其相邻的两个点的颜色一样,则这个点会变成相邻点的颜色,否则不变化。再一次变换中,所有点是同时变换的。
设\(f(A)\)表示环\(A\)要变换多少次之后才能稳定。若永远不稳定,\(f(A)=-1\)。
有q个区间覆盖修改,求每次修改后的f(A)。
\(n,q\le500000\)。
Solution
首先可以推出来有两个结论
- 
连续相同的串不会有变换。 
- 
连续不同的串会一直变换,变换次数是\(\frac{len-1}2\)。 
如有一个环上最长的\(01\)交替是这样的:\(10101\),长度为5
那么默认前/后都是和首/尾相同的数字:\(11110101111\)
手推经过两次后:\(1111101111111\Rightarrow11111111111\)。
偶数也是一样的。
在线段树上维护这个环最长的\(01\)交替子串即可。
区间内最长的\(01\)交替,从左开始的\(01\)交替,从右开始的\(01\)交替。维护区间内的\(01\)最大长度即可。
而在环上的话就把首尾判一下即可。

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号