「CodePlus 2017 11 月赛」Yazid 的新生舞会
「CodePlus 2017 11 月赛」Yazid 的新生舞会
最基本的分析这里只保留: \(cnt>\frac{len}{2}\Rightarrow 2cnt>len\)
对于每一个合法的区间,合法的众数显然只有一个
考虑对于每一个众数计算答案,把 \(x\) 出现的位置拿出来成一个序列 \(A_i\)
如果选择的区间恰好包含 \(A_i,A_{i+1},\cdots ,A_j\) ,那么合法的情况就是 \(2(j-i+1)>R-L+1,L\in[A_{i-1}+1,A_i],R\in[A_{j},A_{j},A_{j+1}-1]\)
参数分离得到 \(2j-R>2i-L\)
如果对于每一个 \(L\) 更新答案,那么更新的是一段区间,不妨设其为 \(UL,UR\)
对于每个 \(R\) 查询则是一段前缀 和 的区间
我们知道树状数组维护区间修改区间查询需要做一次差分,而这次是区间前缀和
也就是说是再高一维。。
不妨在 \(UL\) 上加, \(UR\) 上减,那么在 \(p\) 处的更新对于在 \(k\) 处的查询的贡献是
\(\cfrac{(k-p+1)(k-p+2)}{2}=\cfrac{k^2+p^2-2pk+3k-3p+2}{2}\)
那么直接处理这个式子即可,需要维护 \(updval,p\cdot updval,p^2\cdot updval\)
查询时加入 \(k\) 的贡献
1 |
|