有趣的科技。Orz lxl。
首先考虑一个裸的莫队解法,用一个桶存一下,每次暴力找新增的贡献即可。
复杂度是 O(n√n(14k))。
显然过不掉啊……
注意到这个 O((14k)) 来自于新增的贡献,于是可以考虑优化这一过程。
考虑从 [l,r] 转移到 [l,r+k],设 c(x,[l,r]) 表示 x 对 [l,r] 的贡献,则总贡献为 r+k∑i=r+1c(i,[l,i))=r+k∑i=r+1[c(i,[1,i))−c(i,[1,l))]
于是贡献就被分成了两种:c(i,[1,i)) 和 c(i,[1,r])。
前一种一定只会有 n 个,于是一遍 O(n(14k)) 处理。
后一种,注意到每次转移时,计算贡献的区间都是同一个,而移动的位置只会有 O(n√n) 个,于是可以轻易做到总复杂度 O(n(14k)+n√n)。
代码:
1 |
|