2019icpc南昌邀请赛B Polynomial (拉格朗日插值法)
题目链接: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 (拉格朗日插值法)的更多相关文章
- 2019ICPC南昌邀请赛网络赛 I. Max answer (单调栈+线段树/笛卡尔树)
题目链接 题意:求一个序列的最大的(区间最小值*区间和) 线段树做法:用单调栈求出每个数两边比它大的左右边界,然后用线段树求出每段区间的和sum.最小前缀lsum.最小后缀rsum,枚举每个数a[i] ...
- 计蒜客 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 ...
- 2019icpc南昌邀请赛F(线段树)
题目链接:https://nanti.jisuanke.com/t/40258 题意:给长为n的数组a,有m次操作,包括单点修改和查询F(l,r),其值为所有f(i,j)的异或和,l<=i< ...
- 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+ ...
- Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法
本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...
- 拉格朗日插值法——用Python进行数值计算
插值法的伟大作用我就不说了.... 那么贴代码? 首先说一下下面几点: 1. 已有的数据样本被称之为 "插值节点" 2. 对于特定插值节点,它所对应的插值函数是必定存在且唯一的(关 ...
- CPP&MATLAB实现拉格朗日插值法
开始学习MATLAB(R和Python先放一放...),老师推荐一本书,看完基础就是各种算法...首先是各种插值.先说拉格朗日插值法,这原理楼主完全不懂的,查的维基百科,好久才看懂.那里讲的很详细,这 ...
- codeforces 622F. The Sum of the k-th Powers 拉格朗日插值法
题目链接 求sigma(i : 1 to n)i^k. 为了做这个题这两天真是补了不少数论, 之前连乘法逆元都不知道... 关于拉格朗日插值法, 我是看的这里http://www.guokr.com/ ...
- bzoj4559[JLoi2016]成绩比较 容斥+拉格朗日插值法
4559: [JLoi2016]成绩比较 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 261 Solved: 165[Submit][Status ...
随机推荐
- position:fixed 失效问题
为了提升动画性能,在body上加上了transform:translate3d(0,0,0) 但是3d使得新建了一个层(具体原因请参考:高性能css动画),导致position:fixed不在当前的层 ...
- sh_16_字符串判断方法
sh_16_字符串判断方法 # 1. 判断空白字符 space_str = " \t\n\r" print(space_str.isspace()) # 2. 判断字符串中是否只包 ...
- java 根据html模板生成html文件
1.代码部分 import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test. ...
- smartbi的安装及使用
http://wiki.smartbi.com.cn/pages/viewpage.action?pageId=42011285
- SLC-Microsoft:Microsoft Lifecycle Policy
ylbtech-SLC-Microsoft:Microsoft Lifecycle Policy Microsoft Lifecycle Policy The Microsoft Lifecycle ...
- 把java项目打包成jar包并可以直接运行【我】
首先创建一个maven的jar项目,然后代码写好后,在项目右键,导出: 选择java下面的可运行的jar文件: 下一步: 要注意的是: launch configuration 此选项是指定选中要导出 ...
- Linux物理网卡聚合及桥接
说明: (1).在网卡聚合绑定之前,要先停用NetworkManager服务(或者在网卡中添加参数:NM_CONTROLLED=no),否则系统重启后绑定的IP失效了. # systemctl sto ...
- Hadoop_Hbase集群完全离线安装[CDH 5.13.1]
here 一.环境准备:(这儿准备了三台虚拟机:内存6-3-3) JDK: -openjdk rpm -e java--openjdk-headless rpm -e java--openjdk-he ...
- vue中refs的使用
最近在看其他项目的过程中,发现在dom节点上使用了ref="xxx"的使用,以前一直不知道该属性起着什么作用,因为一直忙着写项目. 这两天项目不忙了,有闲心来看别人做的项目了,就看 ...
- 怎样将DataGrip连接到MS SQL Server?
DataGrip支持几乎所有主流的关系数据库产品,如DB2.Derby.H2.MySQL.Oracle.PostgreSQL.SQL Server.Sqllite及Sybase等,并且提供了简单易用的 ...