博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[分块]JZOJ 100035 区间
阅读量:6181 次
发布时间:2019-06-21

本文共 938 字,大约阅读时间需要 3 分钟。

Description

 

Input

Output

 

Sample Input

sample1:4 2 105 1 1 10sample2:1000 97 9699835141 1668 505 2333

Sample Output

sample1:4sample2:1749769
 

Data Constraint

分析

这题赛场打的是部分分,逆元前缀乘积40points

然后比赛结束看题解发现自己最早的想法已经接近正解了(fk u)

一开始是想分块,维护区间乘积,然后空间和时间都不接受

其实只需要维护块内前缀乘积和后缀乘积即可,这样可以O(1)得到乘积并异或上去

#include 
#include
using namespace std;const int N=10000001;int s[2*N];int sumq[2*N],sumn[2*N];int n,k,m,P,a,b,c,d;void Block(int x) { int l=(x-1)*k+1,r=min(x*k,n); sumq[l]=s[l];sumn[r]=s[r]; for (int i=l+1;i<=r;i++) sumq[i]=1ll*sumq[i-1]*s[i]%P; for (int i=r-1;i>=l;i--) sumn[i]=1ll*sumn[i+1]*s[i]%P;}int main() { freopen("range.in","r",stdin); freopen("range.out","w",stdout); scanf("%d%d%d",&n,&k,&P); scanf("%d%d%d%d",&a,&b,&c,&d); s[1]=a; for (int i=2;i<=n;i++) s[i]=(1ll*s[i-1]*b+c)%d; int m=n/k; if (m*k
View Code

 

转载于:https://www.cnblogs.com/mastervan/p/9451470.html

你可能感兴趣的文章
[python]什么是生成器
查看>>
解决Autofac MVC 自动注入在 Areas拆分到不同dll下的注入失败问题
查看>>
[angularjs] angularjs系列笔记(六)http
查看>>
[Go] golang的用途和windows搭建环境
查看>>
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
查看>>
java基础编程一
查看>>
select获取选中的option(包含value和text,重点是text怎么获取)
查看>>
使用C#创建windows服务续之使用Topshelf优化Windows服务
查看>>
java:transient是什么,有什么作用
查看>>
转载文章
查看>>
flex 弹性盒子模型一些案例.html
查看>>
文档注释和显示图片
查看>>
请简述以下两个for 循环的优缺点
查看>>
服务端程序设计和实现总结 【转】
查看>>
08:石头剪刀布(1.6)
查看>>
Iptables防火墙NAT地址转换与端口转发
查看>>
linux内核中的每cpu变量
查看>>
C# 参考之方法参数关键字:params、ref及out
查看>>
看懂UML类图和时序图
查看>>
ios Block解决循环引用和回传值
查看>>