题目链接: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. position:fixed 失效问题

    为了提升动画性能,在body上加上了transform:translate3d(0,0,0) 但是3d使得新建了一个层(具体原因请参考:高性能css动画),导致position:fixed不在当前的层 ...

  2. sh_16_字符串判断方法

    sh_16_字符串判断方法 # 1. 判断空白字符 space_str = " \t\n\r" print(space_str.isspace()) # 2. 判断字符串中是否只包 ...

  3. java 根据html模板生成html文件

    1.代码部分 import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test. ...

  4. smartbi的安装及使用

    http://wiki.smartbi.com.cn/pages/viewpage.action?pageId=42011285

  5. SLC-Microsoft:Microsoft Lifecycle Policy

    ylbtech-SLC-Microsoft:Microsoft Lifecycle Policy Microsoft Lifecycle Policy The Microsoft Lifecycle ...

  6. 把java项目打包成jar包并可以直接运行【我】

    首先创建一个maven的jar项目,然后代码写好后,在项目右键,导出: 选择java下面的可运行的jar文件: 下一步: 要注意的是: launch configuration 此选项是指定选中要导出 ...

  7. Linux物理网卡聚合及桥接

    说明: (1).在网卡聚合绑定之前,要先停用NetworkManager服务(或者在网卡中添加参数:NM_CONTROLLED=no),否则系统重启后绑定的IP失效了. # systemctl sto ...

  8. Hadoop_Hbase集群完全离线安装[CDH 5.13.1]

    here 一.环境准备:(这儿准备了三台虚拟机:内存6-3-3) JDK: -openjdk rpm -e java--openjdk-headless rpm -e java--openjdk-he ...

  9. vue中refs的使用

    最近在看其他项目的过程中,发现在dom节点上使用了ref="xxx"的使用,以前一直不知道该属性起着什么作用,因为一直忙着写项目. 这两天项目不忙了,有闲心来看别人做的项目了,就看 ...

  10. 怎样将DataGrip连接到MS SQL Server?

    DataGrip支持几乎所有主流的关系数据库产品,如DB2.Derby.H2.MySQL.Oracle.PostgreSQL.SQL Server.Sqllite及Sybase等,并且提供了简单易用的 ...