拉格朗日插值:给定 \(n+1\) 个点值 \((x_i,y_i)\),对应唯一一个 \(n\) 次多项式,带入 \(f(k)=\sum\limits_{i=1}^{n+1} y_i\prod\limits_{j\neq i} \frac{k-x_j}{x_i-x_j}\)。
基本思想就是,构建 \(n+1\) 个多项式使得 \(x=x_i\) 时为 1,\(x=x_j(j\neq i)\) 时为 0。
当你取的点值连续的时候可以线性插值。这个时候底数就是 \((-1)^{n+1-i}(i-1)!(n+1-i)!\)。可以直接预处理。分子一般是直接维护前缀后缀积。
例题 1:CF622F
首先我们要知道几个基本的结论:
- \(n\) 次多项式的前缀和是 \(n+1\) 次多项式。
- \(n\) 次多项式的差分是 \(n-1\) 次多项式。
证明可以看看 Imagine 的博客,一般情况可以推一推式子化成自然数幂和的形式。
回到这个题,我们知道答案是 \(k+1\) 次多项式,所以带入 \(k+2\) 个点值即可做到 \(\mathcal O(k)\)。因为 \(Id^k\) 是积性函数所以是可以预处理的。
例题 2:ABC208F
我们考虑每个幂对答案的贡献。当我们固定 \(m\)(把 \(m\) 当成函数)列出式子,发现是一个关于 \(n\) 的 \(k+m\) 次多项式,于是带入 \(k+m+1\) 个值插值即可。
例题 3:CF995F
暴力 dp 容易列出。我们归纳证明它是一个 \(f_u(d)\) 是一个 \(siz_u-1\) 次的多项式。
首先叶子节点是 0 次多项式。然后对于非叶子节点 \(u\),它的子节点 \(v\) 对应 \(f_v\) 做前缀和得到一个 \(siz_v\) 次多项式,然后乘起来得到 \(\sum_v siz_v=siz_u-1\) 次多项式。
例题 4:P4463
用类似的方法证明最后答案是一个 \(2n\) 次多项式。
例题 5:P3643
将权值区间左闭右开离散化,发现每一段内的权值转移形式相同。于是分成 \(\mathcal O(n)\) 段,每段内部进行线性插值即可。
标签:拉格朗,前缀,插值,siz,多项式,例题 From: https://www.cnblogs.com/663B/p/17766434.html