拉格朗日插值

拉格朗日插值:给定 \(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)\) 段,每段内部进行线性插值即可。

posted @ 2023-10-15 23:08  ImALAS  阅读(40)  评论(0编辑  收藏  举报