题目大意:
给一个长度为nnn的序列aaa,支持两个操作。

分析:
考虑扩展欧拉定理,
ab≡abmodϕ(m)+ϕ(m)(modm)a^b≡a^{b\ mod\ \phi(m)+\phi(m)} (mod\ m)ab≡ab mod ϕ(m)+ϕ(m)(mod m)
保证b≥ϕ(m)b≥\phi(m)b≥ϕ(m),如果不大于可以直接暴力算。
对于一个询问q(l,r,p)q(l,r,p)q(l,r,p),可以看做求q(l+1,r,ϕ(p))q(l+1,r,\phi(p))q(l+1,r,ϕ(p)),得到值后判断是否大于ϕ(p)\phi(p)ϕ(p),只要对ϕ(p)\phi(p)ϕ(p)取过模就一定大于ϕ(p)\phi(p)ϕ(p),然后直接快速幂得到。
对于q(l+1,r,ϕ(p))q(l+1,r,\phi(p))q(l+1,r,ϕ(p))还是可以继续递归下去,直到ϕ(p)=1\phi(p)=1ϕ(p)=1,结果一定取过模,直接返回111。这样不超过lognlognlogn次递归就可以是模数为111。
修改可以使用树状数组。

代码:

/**************************************************************Problem: 5394User: ypxrainLanguage: C++Result: AcceptedTime:11000 msMemory:182932 kb
****************************************************************/#include <iostream>
#include <cstdio>
#include <cmath>
#define LL long longconst int maxn=5e5+7;
const int maxd=2e7;using namespace std;int n,m,op,x,y,k,cnt;
int a[maxn],phi[maxd+7],prime[maxd];
bool not_prime[maxd];struct Treearray{LL t[maxn];void updata(int x,int k){for (int i=x;i<=n;i+=i&(-i)) t[i]+=(LL)k;}LL getsum(int x){LL sum=0;for (int i=x;i>0;i-=i&(-i)) sum+=t[i];return sum;}LL ins(int l,int r,int k){updata(l,k);if (r<n) updata(r+1,-k);}
}T;void getphi(int n)
{phi[1]=1;for (int i=2;i<=n;i++){if (!not_prime[i]){prime[++cnt]=i;phi[i]=i-1;}for (int j=1;j<=cnt;j++){if (i*prime[j]>n) break;not_prime[i*prime[j]]=1;if (i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}else phi[i*prime[j]]=phi[i]*(prime[j]-1);}}
}LL power(LL x,LL y,LL p)
{LL ret=1;int flag=0,flag1=0;while (y){if (y&1){ret*=x;flag=flag1;if (ret>=p) ret%=p,flag=1;}if (x>=p) flag1=1,x%=p;x=x*x;if (x>=p) flag1=1,x%=p;y>>=1;}if (flag) return ret+p;return ret;
}LL solve(int l,int r,int p)
{if (p==1) return 1;if (l>r) return 1;LL x=T.getsum(l)+(LL)a[l],y=solve(l+1,r,phi[p]);return power(x,y,(LL)p);
}int main()
{getphi(maxd);scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) scanf("%d",&a[i]);for (int i=1;i<=m;i++){scanf("%d%d%d%d",&op,&x,&y,&k);if (op==1) T.ins(x,y,k);else{printf("%lld\n",solve(x,y,k)%k);}}
}

bzoj 5394: [Ynoi2016]炸脖龙 扩展欧拉定理+树状数组相关推荐

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

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

  2. P3934-Nephren Ruq Insania【欧拉定理,树状数组】

    正题 题目链接:https://www.luogu.org/problemnew/show/P3934 题目大意 长度为nnn的序列aaa 1lrw:1\ l\ r\ w:1 l r w:让l∼rl\ ...

  3. BZOJ.2738.矩阵乘法(整体二分 二维树状数组)

    题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理 ...

  4. bzoj 4372 烁烁的游戏——动态点分治+树状数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4372 和 bzoj 3070 震波 是一个套路.注意区间修改的话,树状数组不能表示 dis ...

  5. Bzoj 4548: 小奇的糖果(双向链表+排序+树状数组)

    以下内容来自ShallWe's Blog 题目 4548: 小奇的糖果 Description 有\(N\)个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能 ...

  6. bzoj 4372 烁烁的游戏 —— 动态点分治+树状数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4372 本以为和 bzoj3730 一样,可以直接双倍经验了: 但要注意一下,树状数组不能查询 ...

  7. BZOJ 3289 Mato的文件管理(莫队+树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3289 [题目大意] 求静态区间逆序对. [题解] 我们对查询进行莫队操作,对于区间的删 ...

  8. bzoj 3356: [Usaco2004 Jan]禁闭围栏(扫描线+树状数组)

    3356: [Usaco2004 Jan]禁闭围栏 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 45  Solved: 26 [Submit][S ...

  9. 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 ...

  10. BZOJ 2141 排队(块套树,分块,树状数组)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2141 是 hydro 的 BZOJ ...

最新文章

  1. [leetcode]Sort Colors
  2. C 把两个bitmap文件合并成一个bitmap文件
  3. 【Git入门之十二】DIY Git
  4. c语言启动程序句柄无效,电脑中玩英雄联盟提示“句柄无效”是怎么回事
  5. 实现Nginx https
  6. 7-28晚复习 虚继承与地址分配
  7. iOS开发(3)UIButton
  8. java处理json回车_json中换行符的处理方法示例介绍
  9. np读取csv文件_pandas.read_csv函数参数详解
  10. 绕过安全沙箱限制加载在线图片
  11. 群晖远程访问服务器,如何通过远程访问访问Synology中的所有数据
  12. 异常:Software caused connection abort: socket write error
  13. 华为模拟器ensp与真实机器连接使用的配置内容二
  14. 跨域技术-jsonp
  15. Python网络爬虫实现音乐下载器和图片下载器功能
  16. 如何使用shell限制指定用户shell程序的网络带宽
  17. 004@ kernel 的配置和编译总结 分析2
  18. 华为云数据库三大优势
  19. 大一c语言实验报告运行结果,大一c语言实验报告
  20. Html a标签的用法

热门文章

  1. 能否将一个网址(如QQ空间网址),打包成APK,然后别人下载APK安装到手机后,点击进入这个网址?
  2. 模板方法模式(java语言实现)
  3. java地铁售票机系统_Java_地铁购票系统
  4. 亚特兰蒂斯_亚特兰蒂斯的命运与可下载内容的作用
  5. 百度 BAE 项目部署
  6. 深度学习研究生常用网站||图像处理||医学影像||使用评价||汇总
  7. bmp怎样转成jpg,bmp格式换jpg
  8. 泰坦尼克号(1997)
  9. 小白科普:10Mb独享服务器相当于多少流量?一个月3500GB流量的服务器可以支持多少PV?多少IP访问?
  10. 大数据基础概念(三)