题意
给定序列 \(a_1,a_2,...,a_n\) ,求最长的满足区间众数有至少两种的区间长度。
\(n≤2×10^5,1≤a_i≤min(100,n)\)
题解
首先,若整个序列有至少两种众数,则答案为 \(n\) 。
否则,答案区间一定包含序列的众数。
证明:若答案区间不包含序列的众数 \(x\),其众数为 \(y\)。则将答案区间向两边扩展,必定会有一个时候,满足 \(x\) 出现次数等于 \(y\)。
注意到 \(a_i≤100\),则可以枚举一个 \(y\),使得 \(x\) 与 \(y\) 是答案区间的众数。问题转化为:求最大的区间使得 \(x\) 与 \(y\) 出现次数相等,且没有其他数出现次数大于之。
此时依然不易解决。注意到:若区间中有 \(z\) 的出现次数大于 \(x\) 和 \(y\),则可以扩展区间,使得 \(x\) 与 \(z\) 出现次数相等。于是我们可以不用考虑“且没有其他数出现次数大于之”的条件了。
此时问题进一步转化为:求最大的区间使得 \(x\) 与 \(y\) 出现次数相等。将 \(x\) 设为 \(1\),\(y\) 设为 \(-1\),其他为 \(0\)。用桶线性解决。