Description
给定长度为$n (n \le 5 \times 10 ^ 5)$的序列,求满足区间$[l, r]$众数出现次数严格大于$\displaystyle \frac {r - l + 1} {2}$的子区间个数
Solution
考虑分治
对于$[L, R]$以及$Mid$,我们想办法统计经过$Mid$的区间的答案
首先求出所有可能的众数,这个可以$\mathcal{O} (n)$求出
然后将式子转化一下,枚举所有众数,设当前数为$x$
$$
cnt \gt \lfloor \frac {r - l + 1} {2} \rfloor
$$
$$
2cnt \gt r - l + 1
$$
可以将$cnt$拆成两部分
$$
2cnt_{L \sim r} - 2cnt_{L \sim {l - 1}} > r - L - (l - 1 - L)
$$
$$
cnt_{L \sim r} - (r - L + 1 - cnt_{L \sim r}) > cnt_{L \sim l - 1} - (l - 1 - L + 1 - cnt_{L \sim l - 1})
$$
发现不等号右边那个部分可以通过枚举$L \sim Mid$全部求出来,统计的时候求个前缀和即可
复杂度$\mathcal {O} (n \log ^ 2 n)$
Code
1 |
|