传送门


考虑广义欧拉定理

直接暴力从左到右扫
这样最多logloglog次模数就变成1了
然后就没了
注意快速幂的时候记一下取没取模
每层不要乱取模,因为每次模数不一样

复杂度O(nlog2n+p)O(nlog^2n+p)O(nlog2n+p)
有点小卡空间

#include<bits/stdc++.h>
using namespace std;
const int RLEN=1<<21|1;
#define ll long long
inline char gc(){static char ibuf[RLEN],*ib,*ob;(ob==ib)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ib==ob)?EOF:*ib++;
}
inline int read(){char ch=gc();int res=0,f=1;while(!isdigit(ch))f^=ch=='-',ch=gc();while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();return f?res:-res;
}
const int N=500005;
const int M=20000007;
int phi[M],pr[M],n,m,tot,vis[M],a[N];
ll tr[N];
#define lowbit(x) (x&(-x))
inline void update(int p,ll k){for(;p<=n;p+=lowbit(p))tr[p]+=k;
}
inline ll query(int p,ll res=0){for(;p;p-=lowbit(p))res+=tr[p];return res;
}
inline void init(){for(int i=2;i<=M-7;i++){if(!vis[i]){pr[++tot]=i,phi[i]=i-1;}for(int j=1;j<=tot&&1ll*pr[j]*i<=M-7;j++){vis[i*pr[j]]=1;if(i%pr[j]==0){phi[i*pr[j]]=phi[i]*pr[j];break;}phi[i*pr[j]]=phi[i]*(pr[j]-1);}}
}
inline int ksm(ll a,ll b,int mod,ll res=1){int f1=0,f2=0;if(a>=mod)a%=mod,f2=1;for(;b;b>>=1,a=a*a,(a>=mod)?(a%=mod,f2=1):0){if(b&1){res=res*a,f1=f2;if(res>=mod)res%=mod,f1=1;}}res=res+f1*mod;return res;
}
inline ll solve(int pos,int des,ll mod){if(mod==1||pos>des)return 1;ll x=query(pos)+a[pos],y=solve(pos+1,des,phi[mod]);return ksm(x,y,mod);
}
int main(){init();n=read(),m=read();for(int i=1;i<=n;i++)a[i]=read();for(int i=1;i<=m;i++){int op=read(),l=read(),r=read(),k=read();if(op==1){update(l,k),update(r+1,-k);}else{cout<<solve(l,r,k)%k<<'\n';}}
}

【BZOJ5394】【Ynoi2016】—炸脖龙(树状数组+广义欧拉定理)相关推荐

  1. BZOJ 5394 [Ynoi2016]炸脖龙 (线段树+拓展欧拉定理)

    题目大意:给你一个序列,需要支持区间修改,以及查询一段区间$a_{i}^{a_{i+1}^{a_{i+2}...}}mod\;p$的值,每次询问的$p$的值不同 对于区间修改,由线段树完成,没什么好说 ...

  2. HDU - 6183 Color it(动态开点线段树/树状数组套动态开点线段树)

    题目链接:点击查看 题目大意:给出一个二维平面坐标系,需要完成四种操作: 0:删除所有点 1 xycx\ y\ cx y c:在点 (x,y)(x,y)(x,y) 处添加颜色 ccc 2 xy1y2x ...

  3. BZOJ.4553.[HEOI2016TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)

    题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j)if(a[j ...

  4. P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  5. 20220725树状数组入门反思

    最近学习了树状数组和线段树,图论一点点啃吧,然后首先介绍一下树状数组的原理: 借用acwing一老哥的题解了. 树状数组的本质思想是使用树结构维护"前缀和",从而把时间复杂度降为O ...

  6. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  7. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  8. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  9. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  10. poj_3067 树状数组

    题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...

最新文章

  1. react创建组件_如何使用React创建时间轴组件
  2. [C语言](一)第一个Windows 32 API的窗口程序
  3. GPS-nmealib学习
  4. go语言io reader_【已解决】go语言中如何使用io的MultiWriter
  5. 高性能JavaScript DOM编程
  6. TCP实现多线程下文件的上传
  7. 田永强:优秀的JavaScript模块是怎样炼成的
  8. 【CarMaker学习笔记】申请使用账号
  9. python北风网培训班视频
  10. 大气层整合傻瓜包_三国无双7大气层傻瓜包存档
  11. 航测无人机航线规划原理
  12. 计算机WORD列宽行高怎么设置,word2010表格列宽和行高怎么设置
  13. 星星之火-38:LTE物理层无线资源与帧结构快速入门
  14. Barracudanbsp;VSnbsp;antelope
  15. 国际网址导航系统thinkphp5源码
  16. 学习无人机-C01小四轴无人机初体验
  17. mysql cc攻击_CC攻击数据详细分析
  18. 何涛连忙叫请兄弟到 常用软件
  19. Vue 电话号码344分割
  20. 爬虫爬取快代理网站动态IP

热门文章

  1. 企业微信api调用报50001错误
  2. 代码质量检查规则中的 is provided externally to the method and not sanitized b.
  3. Python最详细的 机器学习算法:逻辑回归的推导及实战 你值得拥有!
  4. Zookeeper ZAB协议中FLE选举通信流程
  5. 页面跳转的两种方式(转发和重定向)区别详解:
  6. DNS污染,配置DNS
  7. matlab在常微分方程的应用,MATLAB在求解常微分方程中的应用
  8. 深红色LaTeX PPT模板解释说明
  9. Java Swing制作超简单版打地鼠小游戏
  10. java xlsm_poi读取excel(xls和xlsx,xlsm)给定单元格内容