[Luogu 11772] 报社天狗

方便起见,将原文中 \(b\) 的下标整体平移 \(1\),那么所求即:(下面的 \(n / i\) 向下取整。)

\[\begin{aligned} & \sum_{i = 1}^n a_i \sum_{j = d(i) + 1}^{n / i} b_j\\ =& \sum_{i = 1}^n a_i \sum_{j = 1}^{n / i} b_j - \sum_{i = 1}^n a_i \sum_{j = 1}^{\min(d(i), n / i)} b_j\\ =& \sum_{i = 1}^n a_i \sum_{j = 1}^{n / i} b_j - \sum_{j = 1}^n b_j \sum_{i = 1}^{n/j}[j \le d(i)]a_i \end{aligned} \]

前面那一项可以直接数论分块+序列分块,\(O(\sqrt n)\) 单点修改,\(O(1)\) 查前缀和,单次 \(O(\sqrt n)\) 计算它的值。

发现最大的 \(d(i)\)\(240\),且不同的 \(d(i)\)\(94\) 个,直接开 \(94\) 个树状数组维护每个 \(\sum_{i=1}^k[j \le d(i)]a_i\),每次询问 \(j\)\(1\) 枚举到 \(240\) 查询。

时间复杂度 \(O(q(\sqrt n + D \log n))\),其中 \(D = \max d(i) = 240\)

posted @ 2025-07-07 21:23  SZwinsun  阅读(5)  评论(0)    收藏  举报