CF1322E
作者:互联网
只用ST表+二分的\(\mathcal O(N\log N)\)做法:
只考虑\(01\)序列的情况。不妨设\(a_{0}=a_1,a_{n+1}=a_n\),则\(1\)和\(n\)可以照常参加变换。
有长度\(>1\)的\(0\)或\(1\)连续段时其将稳定不变,将序列按照这些颜色相同的连续段分开。剩下若干\(0\)和\(1\)交错的连续段。若\(01\)连续段长度为奇数则其左端和右端的颜色相同,其会在\(\frac{len+1}2\)时间后变为其左端/右端的颜色(\(len\)为\(01\)连续段长度,下同)。
否则\(01\)连续段左半边会变为其左端的颜色,右半边会变为其右端的颜色,耗时\(\frac{len}2\)。
考虑一般的情况。设一个值\(x\),将\(a\)中所有\(\le x\)的值设为\(0\),其余设为\(1\),则原序列的答案为所有\(x\)对应的\(01\)序列答案的较大值。
考虑对每个位置计算其稳定下来需要的时间。
对相邻两个元素\(a_{i},a_{i+1}\),若\(x\ge a_i,a_{i+1}\)则其会作为\(0\)连续段出现,若\(x\le a_{i},a_{i+1}\)其会作为\(1\)连续段出现(\(=\)没有问题,因为\(x=a_i\)取\(0\)可以判别答案是否\(\ge x\),取\(1\)可以判别答案是否\(\le x\),若一个数的答案又\(\ge x\)又\(\le x\)则答案就是\(x\))。
对位置\(p\),枚举其稳定所需时间\(t\),则涉及段为\([p-t-1,p+t+1]\)。如果存在一个\(x\)满足区间内既有\(0\)连续段又有\(1\)连续段则表明\(t\)过大(观察上面\(01\)序列的情况,决定颜色只与距自己近的一侧连续段有关),否则可以试着增大\(t\),利用二分即可算出所有位置的稳定时间。
考虑根据稳定时间计算答案。若\(t=0\)则答案显然为\(a_p\)。否则考虑\(a_p\)和\(a_{p+1}\)的大小关系(显然其不相等且\(\operatorname{sgn}(a_p-a_{p+1})=\operatorname{sgn}(a_p-a_{p-1})\))。若\(a_p<a_{p+1}\)。\(a_p\)对应的\(01\)序列为\(0\),若\(t\)为奇数,不失一般性地假设答案对应的连续段在\(p\)右侧,则\(01\)序列为\(01010\dots 11\),取\(x\)最大的存在\(1\)连续段的数作为答案。否则取\(x\)最小的存在\(0\)连续段的数作为答案。设\(b_i=\min(a_i,a_{i+1}),c_i=\max(a_i,a_{i+1})\),用ST表维护\(\max b_i,\min c_i\)即可。
标签:le,颜色,01,连续,答案,CF1322E,序列 来源: https://www.cnblogs.com/Nikrot/p/16545222.html