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 ...
随机推荐
- c++ string类型成员变量在调用构造函数后未能正确赋值
struct RelItem{ string segName; Elf32_Rel* rel; string relName; RelItem(string seg, int addr, string ...
- 通过vs2015给QT添加模块
Qt VS Tools->Qt Project Settings->Qt Modules
- Hadoop的理解笔记
1.2Hadoop与云计算的关系1.什么是云计算:一种基于互联网的计算,在其中共享的资源.软件和信息以一种按需的方式提供给计算机和设备 , 就如同日常生活中的电网一样. 什么是Hadoop:Hadoo ...
- JS 07 Dom
DOM(Document Object Model): 结点的概念:整个文档就是由层次不同的多个节点组成,可以说结点代表了全部内容. 结点类型 1.元素结点 2.属性结点 3.文本结点 结点的注意 ...
- 基于搜索的贝叶斯网络结构学习算法-K2
基于搜索的贝叶斯网络结构学习算法-K2 2018-04-05 19:34:18 ItsBlue 阅读数 3172更多 分类专栏: 贝叶斯网络 网络结构学习 版权声明:本文为博主原创文章,遵循CC ...
- 修改win7 iis上传文件大小限制200KB
win7 iis 修改上传限制,需要修改2个地方: 1,“双击“Internet 信息服务(IIS)管理器”中的“ASP”– 打开“配置 ASP 应用程序的属性”–展开“限制属性”:修改“最大请求实体 ...
- SQL 遍历删除所有表的数据
https://www.cnblogs.com/yige/p/5193253.html declare @sqlTabName varchar(100);-- 声明游标DECLARE C_Employ ...
- 基于【 centos7】五 || GitLab环境搭建
一.基于Docker部署GitLab环境搭建 1.下载镜像 docker pull beginor/gitlab-ce:11.0.1-ce.0 2.创建GitLab 的配置 (etc) . 日志 (l ...
- K2 BPM_【解决方案】从流程梳理到落地,K2为企业打造流程管理闭环_全业务流程管理专家
很多企业在进行流程管理体系建设的过程中,往往急于求成,还没有理清楚要“做什么”和“怎么做”,就开始大刀阔斧地进行改革优化.管理目标.建设标准的不统一,使得体系建设之间内容重复.要求冲突等现象层出不穷. ...
- Go Select使用
原文:https://golangbot.com/pointers/ 作者:Nick Coghlan 译者:Noluye 什么是 select? select 语句用于在多个发送/接收信道操作中进行选 ...