专栏文章

题解:P14558 [ROI 2013 Day2] 大规模预测

P14558题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mimzbxb6
此快照首次捕获于
2025/12/01 18:01
3 个月前
此快照最后确认于
2025/12/01 18:01
3 个月前
查看原文
求长度为 nn 序列 aa 有多少个子区间的众数出现次数超过了区间长度的一半。n,ai5×105n,a_i\le 5\times 10^5
我们称在区间中出现次数超过区间长度一般的众数为绝对众数。显然,一个区间至多有一个绝对众数。因此枚举每种权值计算贡献。
Sx,iS_{x,i} 表示 j=1i[aj=x]\sum\limits_{j=1}^i[a_j=x]。考虑一个区间 [l,r][l,r]xx 为绝对众数的充要条件,显然 Sx,rSx,l1>rl+12S_{x,r}-S_{x,l-1}>\dfrac{r-l+1}{2},整理得 2Sx,rr>2Sx,l1(l1)2S_{x,r}-r>2S_{x,l-1}-(l-1)。我们记 wx,i=2Sx,iiw_{x,i}=2S_{x,i}-i,就是要统计满足 wx,r>wx,lw_{x,r}>w_{x,l}0l<rn0\le l<r\le n(l,r)(l,r) 对数。将 ww 的值域平移至从 11 开始。枚举 rr,用数据结构维护 ww 的值域前缀 [1,v)[1,v)ll 个数 fvf_v,可以做到 O(n2logn)\mathcal{O}\left(n^2\log n\right)
考虑优化,记 xx 出现的位置依次为 px,1,,px,mp_{x,1},\dots,p_{x,m}。同时不妨 px,0=0p_{x,0}=0。我们发现对于 [px,i,px,i+1)[p_{x,i},p_{x,i+1}) 内的 rr,它们的 Sx,rS_{x,r} 是相同的,因此 wrw_r 呈一段公差为 1-1 的等差数列。考虑怎样快速计算每一段的贡献。考虑维护 fvf_v 表示这一段之前所有段的 ww 前缀值域 [1,v)[1,v) 中的 ll 个数。
记这一段的等差数列为 wr=krw_r=k-r,那么这一段的贡献是:
j=px,ipx,i+11fkj=j=k+1px,i+1kpx,jfj\sum\limits_{j=p_{x,i}}^{p_{x,i+1}-1}f_{k-j}=\sum\limits_{j=k+1-p_{x,i+1}}^{k-p_{x,j}}f_j
相当于要查询 ff 数组区间和。考虑每一段对 ff 数组的影响是什么,记这一段等差数列的值域是 [L,R][L,R]。那么对于 [L,R][L,R] 内的 vv,有 [L,v1][L,v-1] 这些数可以对 fvf_v 产生贡献,为 vLv-L;对于 vR+1v\ge R+1[L,R][L,R] 内的数都可以对 fvf_v 产生贡献。所以操作形如 ff 数组区间加等差数列。用你喜欢的数据结构维护即可。
我使用了树状数组,考虑直接维护 ff 数组的前缀和 FF 数组,考虑每个操作对 FF 产生怎样的影响,手推一下可以发现将 FiF_i 表示为关于 ii 的二次函数,那么每次操作都相当于各次项系数区间加,查询是单点查,就可以树状数组维护了。
认为 nn 和值域同阶,时间复杂度 O(nlogn)\mathcal{O}(n\log n),空间复杂度 O(n)\mathcal{O}(n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...