CF1603C Extreme Extension
有点不想写代码。
首先遇到这种题就想到消消乐,\(f\) 的计算方式必定很简单,根据套路应该是基于某个结构上的贪心。
考虑分拆一个数只会使得其变小,所以我们是不可能从前往后拆的,应该从后往前拆,每次贪心拆满足条件尽可能大的,不难发现这样是对的。
仔细思考如何计算所有子区间答案,令 \(f_{i, j}\) 为所有以 \(i\) 为左端点的区间且 \(a_i\) 分拆出来的头为 \(j\) 的个数,那么简单 DP 一下就可以得到答案。
我们分析一下复杂度,\(j\) 其实是形如一个以 \(i\) 开头的前缀 \(a\) 连除的东西,根据整除分块的结论,本质不同状态数是 \(O(\sqrt n)\) 级别的,所以总复杂度是 \(O(n \sqrt n)\) 的。

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号