P4118 [Ynoi2016]炸脖龙I
思路:扩展欧拉定理
提交:\(\geq5\)次
错因:快速幂时刚开始没有判断\(a\)是否大于\(p\)
题解:
用树状数组维护差分,查询时暴力从左端点的第一个数向右端点递归,若递归时发现指数变为\(1\),则指数返回\(1\);若递归出右端点,指数也返回\(1\);
#pragma GCC optimize (3)
#include<cstdio>
#include<iostream>
#define ll long long
#define R register ll
using namespace std;
namespace Luitaryi {
static char B[1<<15],*S=B,*T=B;
#define getchar() (S==T&&(T=(S=B)+fread(B,1,1<<15,stdin),S==T)?EOF:*S++)
template<class I> inline I g(I& x) { x=0; register I f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*=f;
} const int N=500010,M=2e7;
int n,m,cnt,p[M/2],phi[M+10],a[N];
ll c[N]; bool v[M+10];
inline void PRE() { phi[1]=1;
for(register int i=2;i<=M;++i) {
if(!v[i]) p[++cnt]=i,phi[i]=i-1;
for(register int j=1;j<=cnt&&i*p[j]<=M;++j) {
v[i*p[j]]=true;
if(i%p[j]==0) {
phi[i*p[j]]=phi[i]*p[j]; break;
} phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
}
inline void add(int x,int d) {for(;x<=n+4;x+=x&-x) c[x]+=d;}
inline ll query(int x) { R ret=0; for(;x;x-=x&-x) ret+=c[x]; return ret;}
inline ll qpow(ll a,ll p,int M) { R ret=1;
register bool flg=false,flg1=false;
if(a>=M) flg1=true,a%=M;//先判a
while(p) { if(p&1) {
ret*=a; flg|=flg1;
if(ret>=M) flg=true,ret%=M;
} a*=a; if(a>=M) flg1=true,a%=M; p>>=1;
} return ret+(flg?M:0);//指数是否大于模数
}
inline int solve(int l,int r,int x) {
if(x==1) return 1; //上面是1指数返回1
if(l>r) return 1; //到区间的最后,还是指数返回1
R cur=query(l)+a[l],p=solve(l+1,r,phi[x]);
return qpow(cur,p,x);
}
inline void main() { freopen("in.in","r",stdin); freopen("out.out","w",stdout);
PRE(); g(n),g(m); for(register int i=1;i<=n;++i) g(a[i]);
for(register int i=1,x,l,r,d;i<=m;++i) {
g(x),g(l),g(r),g(d); if(x&1) add(l,d),add(r+1,-d);
if(!(x&1)) printf("%d\n",solve(l,r,d)%d);
}
}
} signed main() {Luitaryi::main(); return 0;}
2019.08.23
77
P4118 [Ynoi2016]炸脖龙I的更多相关文章
- [洛谷P4118][Ynoi2016]炸脖龙I([洛谷P3934]Nephren Ruq Insania)
题目大意:有$n$个数,每个数为$s_i$,两个操作: $1\;l\;r\;x:$表示将区间$[l,r]$内的数加上$x$ $2\;l\;r\;p:$表示求$s_l^{s_{l+1}^{^{s_{l+ ...
- Luogu P4118 [Ynoi2016]炸脖龙I
题目 首先考虑没有修改的情况.显然直接暴力扩展欧拉定理就行了,单次复杂度为\(O(\log p)\)的. 现在有了修改,我们可以树状数组维护差分数组,然后\(O(\log n)\)地单次查询单点值. ...
- BZOJ 5394 [Ynoi2016]炸脖龙 (线段树+拓展欧拉定理)
题目大意:给你一个序列,需要支持区间修改,以及查询一段区间$a_{i}^{a_{i+1}^{a_{i+2}...}}mod\;p$的值,每次询问的$p$的值不同 对于区间修改,由线段树完成,没什么好说 ...
- BZOJ5394: [Ynoi2016]炸脖龙(欧拉广义降幂)
就是让你求这个: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5394 解题思路: NOIP2018后第一道题,感觉非常像那个上帝与集合的 ...
- Luogu 3934 Nephren Ruq Insania
和Ynoi2016 炸脖龙重题了. BZOJ 5394. 首先是扩展欧拉定理: 一开始傻掉了……递归的层数和区间长度无关……也就是说我们每一次直接暴力递归求解子问题一定不会超过$logP$层,因为当模 ...
- [NOI2002]贪吃的九头龙(树形dp)
[NOI2002]贪吃的九头龙 题目背景 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是 说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的 ...
- 龙之谷手游WebVR技术分享
主要面向Web前端工程师,需要一定Javascript及three.js基础:本文主要分享内容为基于three.js开发WebVR思路及碰到的问题:有兴趣的同学,欢迎跟帖讨论. 目录:一.项目体验1. ...
- DX12龙书第6章习题
1. { { , DXGI_FORMAT_R32G32B32_FLOAT, , , D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, }, { , DXGI_FO ...
- 200行代码搞定炸金花游戏(PHP版)
<?php/* * 游戏名称:炸金花(又名三张牌.扎金花) * 开发时间:2009.1.14 * 编 程:多菜鸟 * 来 源:http://blog.csdn.net/kingerq/archi ...
随机推荐
- (十一)El表达式详细介绍
看之前,最好先看下 el表达式快速入门 本来将重点讲下 el表达式 能干嘛 : 目录 执行计算 获得 web 开发常用对象 关于 param 与 paramValues 的用法: 关于 header ...
- CSV文件导入数据库和导出数据库
实例一: <?php $filename = 'test'; //导出文件 header("Content-type: application/vnd.ms-excel; charse ...
- nginx如何调用PHP(nginx+php运行原理)
采用nginx+php作为webserver的架构模式,在现如今运用相当广泛.然而第一步需要实现的是如何让nginx正确的调用php.由于nginx调用php并不是如同调用一个静态文件那么直接简单,是 ...
- Sonya and Bitwise OR CodeForces - 1004F (线段树,分治)
大意: 给定序列$a$, 给定整数$x$. 两种操作(1)单点修改 (2)给定区间$[l,r]$,求有多少子区间满足位或和不少于$x$. 假设不带修改. 固定右端点, 合法区间关于左端点单调的. 可以 ...
- Neo4j基本使用及导入三元组
下载和安装Neo4j 安装Java JDK 下载Neo4j安装文件 创建系统环境变量 Neo4j配置 配置文档存储在conf目录下,Neo4j通过配置文件neo4j.conf控制服务器的工作.默认情况 ...
- js 中的 深拷贝与浅拷贝
js在平时的项目中,赋值操作是最多的:比如说: var person1 = { name:"张三", age:18, sex:"male", height:18 ...
- 3、Concurrenthashmap实现原理(JDK版本1.7)
(1)结构图: l ConcurrentHashMap中的数据结构 ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成.Segment实际继承自可重入锁(R ...
- Android 主Module引用依赖Module,却无法使用里面的依赖库
如果模块化开发中遇到 多模块的AndroidManifest.xml没有合并or多模块的资源文件没有合并or模块A include了模块B,而无法使用模块B内依赖的其他aar包中的类的时候or提示Su ...
- HighChart中的tooltip的第一行数字明显比其他的字要小
问题:HighChart中的tooltip的第一行数字明显比其他的字要小. 解决办法 headerFormat:'<span style="font-size: 14px;font-f ...
- Manifold learning 流形学习
Machine Learning 虽然名字里带了 Learning 一个词,让人乍一看觉得和 Intelligence 相比不过是换了个说法而已,然而事实上这里的 Learning 的意义要朴素得多. ...