题目链接:https://nanti.jisuanke.com/t/40254

题意:

思路:

这题要用到拉格朗日插值法,网上查了一下,找到一份讲得特别好的:

--------------------------------------------------------

以上关于拉格朗日插值法的理论转载自:https://blog.csdn.net/ftx456789/article/details/90750508

关于这道题的做法:
这题给了x从0~n的n+1种取值,那么可以用O(n)来插值,但是它所要求的是。能够想到要用前缀来预处理,我们令:

,则答案为

直接预处理S(x)肯定会T,我们再用一次拉格朗日插值法。

先知道一个常识:n次多项式的前缀和是 n+1 次的多项式,也就是说 S(x)S(x) 要通过 n+2 个点来求出,然而题目只给出了n+1 个点。我们利用前面的插值法求出f(n+1),这样就有了n+2个点。之后就可以对S(x) 进行插值了。总复杂度为O(T*m*n)

要注意的是要线性求逆元,如果用费马小定理会T。

AC代码:

#include<cstdio>
#include<algorithm>
using namespace std; typedef long long LL; const int maxn=;
const int MOD=; int T,n,m;
LL a[maxn],inv[MOD+],finv[maxn];
LL sum[maxn],ans; LL qpow(LL a,LL b){
LL res=;
while(b){
if(b&) res=res*a%MOD;
a=a*a%MOD;
b>>=;
}
return res;
} void init(){
inv[]=;
for(int i=;i<=MOD+;++i)
inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;
finv[]=;
for(int i=;i<=;++i)
finv[i]=finv[i-]*inv[i]%MOD;
} LL cal(LL x,LL *a,LL up){
LL res=;
LL p=;
for(LL i=;i<=up;++i)
p=p*(x-i)%MOD;
for(LL i=;i<=up;++i){
int f=(up-i)&?-:;
res=(res+MOD+a[i]*f*p%MOD*inv[x-i]%MOD*finv[i]%MOD*finv[up-i]%MOD)%MOD;
}
return res;
} int main(){
init();
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i){
scanf("%lld",&a[i]);
a[i]%=MOD;
}
a[n+]=cal(n+,a,n);
sum[]=a[];
for(int i=;i<=n+;++i)
sum[i]=(sum[i-]+a[i])%MOD;
while(m--){
int l,r;
scanf("%d%d",&l,&r);
if(r<=n+){
printf("%lld\n",(sum[r]-sum[l-]+MOD)%MOD);
continue;
}
if(l-<=n+)
ans=(cal(r,sum,n+)-sum[l-]+MOD)%MOD;
else
ans=(cal(r,sum,n+)-cal(l-,sum,n+)+MOD)%MOD;
printf("%lld\n",ans);
}
}
return ;
}

2019icpc南昌邀请赛B Polynomial (拉格朗日插值法)的更多相关文章

  1. 2019ICPC南昌邀请赛网络赛 I. Max answer (单调栈+线段树/笛卡尔树)

    题目链接 题意:求一个序列的最大的(区间最小值*区间和) 线段树做法:用单调栈求出每个数两边比它大的左右边界,然后用线段树求出每段区间的和sum.最小前缀lsum.最小后缀rsum,枚举每个数a[i] ...

  2. 计蒜客 38228. Max answer-线段树维护单调栈(The Preliminary Contest for ICPC China Nanchang National Invitational I. Max answer 南昌邀请赛网络赛) 2019ICPC南昌邀请赛网络赛

    Max answer Alice has a magic array. She suggests that the value of a interval is equal to the sum of ...

  3. 2019icpc南昌邀请赛F(线段树)

    题目链接:https://nanti.jisuanke.com/t/40258 题意:给长为n的数组a,有m次操作,包括单点修改和查询F(l,r),其值为所有f(i,j)的异或和,l<=i< ...

  4. 2019ICPC南昌邀请赛 Sequence

    题意:给出n个点的权值,m次操作,操作为1时为询问,每次询问给出 l 和 r ,求 f(l,r).操作为0时为修改权值.f(l,r)=f(l,l)⊕f(l,l+1)⊕⋯⊕f(l,r)⊕f(l+1,l+ ...

  5. Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法

    本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...

  6. 拉格朗日插值法——用Python进行数值计算

    插值法的伟大作用我就不说了.... 那么贴代码? 首先说一下下面几点: 1. 已有的数据样本被称之为 "插值节点" 2. 对于特定插值节点,它所对应的插值函数是必定存在且唯一的(关 ...

  7. CPP&MATLAB实现拉格朗日插值法

    开始学习MATLAB(R和Python先放一放...),老师推荐一本书,看完基础就是各种算法...首先是各种插值.先说拉格朗日插值法,这原理楼主完全不懂的,查的维基百科,好久才看懂.那里讲的很详细,这 ...

  8. codeforces 622F. The Sum of the k-th Powers 拉格朗日插值法

    题目链接 求sigma(i : 1 to n)i^k. 为了做这个题这两天真是补了不少数论, 之前连乘法逆元都不知道... 关于拉格朗日插值法, 我是看的这里http://www.guokr.com/ ...

  9. bzoj4559[JLoi2016]成绩比较 容斥+拉格朗日插值法

    4559: [JLoi2016]成绩比较 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 261  Solved: 165[Submit][Status ...

随机推荐

  1. WPF显示数据库内容

    https://www.bilibili.com/video/av45138636?from=search&seid=17612939715579515358 以后用到会详细总结.

  2. CF990G GCD Counting 点分治+容斥+暴力

    只想出来 $O(nlogn\times 160)$ 的复杂度,没想到还能过~ Code: #include <cstdio> #include <vector> #includ ...

  3. 基于c++回顾

    c++类 特别的构造函数 默认参数: 几乎所有函数都可以使用默认参数,但在构造函数中最为普遍 初始化列表 用来直接初始化数据成员;与列表顺序无关,与成员申明顺序有关;如果一个成员是const的,那么, ...

  4. 错误/异常:org.hibernate.MappingException: Unknown entity: com.shore.entity.Student 的解决方法

    1.错误/异常视图 错误/异常描述:Hibernate配置文件 映射异常,不明实体类Student(org.hibernate.MappingException: Unknown entity: co ...

  5. Java进阶知识02 Struts2下的拦截器(interceptor)和 过滤器(Filter)

    一.拦截器 1.1.首先创建一个拦截器类 package com.bw.bms.interceptor; import com.opensymphony.xwork2.ActionContext; i ...

  6. typedef简化

    /*** mystrcat: ***/ #include<stdio.h> #include<string.h> char *mystrcat(char *s1,char *s ...

  7. JAVA异常及其异常处理方式

    异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...

  8. 批量插入数据@Insert

    // 批量插入数据 @Insert("<script>" + "insert into index_kline (currency_id, currency, ...

  9. mysql基础知识语法汇总整理(一)

    mysql基础知识语法汇总整理(二)   连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...

  10. TCP之11种状态变迁

    1. TCP 之11种状态变迁 TCP 为一个连接定义了 11 种状态,并且 TCP 规则规定如何基于当前状态及在该状态下所接收的分节从一个状态转换到另一个状态.如,当某个应用进程在 CLOSED 状 ...