【模板】重心拉格朗日插值

int fac[N],ifac[N];
struct lagrange{
int xs[N],ys[N],w[N],K,p[N],s[N];
inline int fk(int k){
return (k&1)?(-1):(1);
}
void construct(int *f,int siz){
K=siz;
for(int i=1;i<=K;++i){
xs[i]=i;
ys[i]=f[i];
w[i]=(fk(K-i)*ifac[i-1]*ifac[K-i]%mo+mo)%mo;
}
}
int f(int x){
for(int i=1;i<=K;++i){
if(xs[i]==x)return ys[i];
}
int ret=0;
p[0]=s[K+1]=1;
for(int i=1;i<=K;++i){
p[i]=(p[i-1]*((x-xs[i])%mo)%mo+mo)%mo;
}
for(int i=K;i>=1;--i){
s[i]=(s[i+1]*((x-xs[i])%mo)%mo+mo)%mo;
}
for(int i=1;i<=K;++i){
ret=(ret+p[i-1]*s[i+1]%mo*w[i]%mo*ys[i]%mo)%mo;
}
return ret;
}
}La;
posted @   chx#XCPC  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示