P5305 [GXOI/GZOI2019] 旧词 树链剖分纸张题 / 离线技巧
首先不难发现就是在 LCA 那道题上加了一个指数。
考虑 LCA 那题做法的本质:我将区间差分,每次处理一个 \([1, l]\) 的前缀,依次对于每个前缀进行求解。
具体来说,这个式子的含义可以转化为我每次将一条 \(1\) 到 \(i\) 的链加一,然后离线查询时直接从 \(x\) 到 \(1\) 记一下贡献即可。
考虑这个式子的本质,假设你现在要求解 \(1 \sim l\) 的答案,那么我们先将 \([1, l]\) 内的每个 \(i\) 到 \(1\) 的链上每个点的 \(siz\) 加一,那么容斥一下不难发现我们的答案本质上是这个(\(x_i\) 为 \(x\) 的 \(i\) 级祖先):
\[\sum_{i} dep_{x_i} \times ( siz_{x_i} - siz_{x_{i - 1}})
\]
考虑拆开这个式子:
\[\sum_{i} dep_{x_i} \times siz_{x_i} - dep_{x_i} \times siz_{x_{i - 1}}
\]
进行邻项提取公因数后我们得到的式子是:
\[\sum_{i} siz_{x_i} \times ( dep_{x_i} - dep_{x_{i + 1}})
\]
我们发现此时这个式子中的第二项就等于 \(1\)了,于是我们的答案便只是:
\[\sum_{i} siz_{x_i}
\]
不过带回到这题,答案便是:
\[\sum_{i} siz_{x_i} \times ( dep_{x_i} ^k - dep_{x_{i + 1}}^k)
\]
发现第二项不是 \(1\) 了,不过我们仍然能够树链剖分解决,具体方法就是维护一个前缀和,区间加的时候打上一个区间的标记即可,第二项可以直接预处理算出来(对于一个点来说第二项系数不会改变)。

浙公网安备 33010602011771号