打表发现对于 i≥2,ai 与 ai+2 两个序列完全相同。
所以只要维护前三行。
第二行就是前 i 个数中 a1,i 出现多少次。
分块解决,fi,j 表示前 i 个块中 j 出现多少次。
第三行就是前 i 个数中有多少种数出现次数不小于前 i 个数中 a1,i 的出现次数。
设一个 gi,j 表示前 i 个块中出现次数超过 j 的有多少种数。
修改的话,注意到 f 改变一位对 g 的影响只有一位,于是可以 O(nT) 解决,其中 T 为块大小。
然后就做完了。
(话说我让 T=500 就变成最优解了?)
代码:
1 |
|