传送门

题解

扩展欧拉定理。

线段树维护,已经全改到底了的节点就不管,不然暴力修改下去。

//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
const int N=+;
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
typedef long long LL;
using namespace std;
LL n,m,p,pp,c,tp,cnt,phi[],pr[][N],pr2[][N],mini[]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} LL a[N],sg[N<<],tot[N<<]; int get_phi(int x) {
int up=sqrt(x),rs=x;
For(i,,up) {
if(!(x%i)) {
rs=rs-rs/i;
while(!(x%i)) x/=i;
}
}
if(x!=) rs=rs-rs/x;
return rs;
} LL get(int i,int a) { //c^a%phi[i]
return pr2[i][a/pp]*pr[i][a%pp]%phi[i];
} #define lc x<<1
#define rc x<<1|1
#define mid ((l+r)>>1)
void build(int x,int l,int r) {
if(l==r) { sg[x]=a[l]; return; }
build(lc,l,mid); build(rc,mid+,r);
sg[x]=(sg[lc]+sg[rc])%p;
tot[x]=min(tot[lc],tot[rc]);
} int lz[N<<];
void down(int x,int l_len,int r_len) {
if(!lz[x]) return;
if(l_len) { sg[lc]=l_len*c%p; tot[lc]=cnt; lz[lc]=; }
if(r_len) { sg[rc]=r_len*c%p; tot[rc]=cnt; lz[rc]=; }
lz[x]=;
} void update(int x,int l,int r,int ql,int qr) {
if(tot[x]>=cnt) return;
if(l>=ql&&r<=qr&&l==r) {
tot[x]++;
sg[x]=a[l]>=phi[tot[x]+]?a[l]%phi[tot[x]+]+phi[tot[x]+]:a[l];
Rep(i,tot[x],) {
int now=sg[x]>=mini[i];
sg[x]=get(i,sg[x]);
if(now&&i!=) sg[x]+=phi[i];
}
return ;
}
if(ql<=mid) update(lc,l,mid,ql,qr);
if(qr>mid) update(rc,mid+,r,ql,qr);
sg[x]=(sg[lc]+sg[rc])%p;
tot[x]=min(tot[lc],tot[rc]);
} LL qry(int x,int l,int r,int ql,int qr) {
if(l>=ql&&r<=qr) return sg[x];
down(x,mid-l+,r-mid);
if(qr<=mid) return qry(lc,l,mid,ql,qr);
if(ql>mid) return qry(rc,mid+,r,ql,qr);
return (qry(lc,l,mid,ql,qr)+qry(rc,mid+,r,ql,qr))%p;
} //#define DEBUG
int main() {
#ifdef DEBUG
freopen("bzoj4869相逢是问候.in","r",stdin);
freopen("bzoj4869相逢是问候.out","w",stdout);
#endif
read(n); read(m); read(p); read(c);
For(i,,n) read(a[i]);
build(,,n);
tp=p; phi[cnt=]=tp;
while(tp!=) {
phi[++cnt]=get_phi(tp);
tp=phi[cnt];
} phi[++cnt]=; phi[cnt+]=;
pp=1e4;
For(i,,cnt) {
tp=; int tc=;
if(c!=) {
for(;;) {
tp*=c; tc++;
if(tp>=phi[i]) {
mini[i]=tc;
break;
}
}
} else mini[i]=1e8;
pr[i][]=pr2[i][]=;
For(j,,pp)
pr[i][j]=pr[i][j-]*c%phi[i];
For(j,,pp)
pr2[i][j]=pr2[i][j-]*pr[i][pp]%phi[i];
} if(c!=) { mini[cnt]=; mini[cnt-]=; }
while(m--) {
int o,l,r;
read(o); read(l); read(r);
if(!o) update(,,n,l,r);
else printf("%lld\n",qry(,,n,l,r)%p);
}
return ;
}

洛谷P3747 [六省联考2017]相逢是问候的更多相关文章

  1. 洛谷 P3747 [六省联考2017]相逢是问候 解题报告

    P3747 [六省联考2017]相逢是问候 题目描述 \(\text {Informatik verbindet dich und mich.}\) 信息将你我连结. \(B\) 君希望以维护一个长度 ...

  2. P3747 [六省联考2017]相逢是问候

    题意 如果对一个数操作\(k\)次,那么这个数会变成\(c^{c^{...^{a_i}}}\),其中\(c\)有\(k\)个. 根据P4139 上帝与集合的正确用法这道题,我们可以知道一个数不断变为自 ...

  3. [BZOJ4869][六省联考2017]相逢是问候(线段树+扩展欧拉定理)

    4869: [Shoi2017]相逢是问候 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 1313  Solved: 471[Submit][Stat ...

  4. 洛谷P3750 [六省联考2017]分手是祝愿(期望dp)

    传送门 嗯……概率期望这东西太神了…… 先考虑一下最佳方案,肯定是从大到小亮的就灭(这个仔细想一想应该就能发现) 那么直接一遍枚举就能$O(nlogn)$把这个东西给搞出来 然后考虑期望dp,设$f[ ...

  5. 洛谷P3746 [六省联考2017]组合数问题

    题目描述 组合数 C_n^mCnm​ 表示的是从 n 个互不相同的物品中选出 m 个物品的方案数.举个例子,从 (1;2;3) 三个物品中选择两个物品可以有 (1;2);(1;3);(2;3) 这三种 ...

  6. 洛谷 P3745 [六省联考2017]期末考试

    题目描述 有 nnn 位同学,每位同学都参加了全部的 mmm 门课程的期末考试,都在焦急的等待成绩的公布. 第 iii 位同学希望在第 tit_iti​ 天或之前得知所有课程的成绩.如果在第 tit_ ...

  7. 洛谷P3749 [六省联考2017]寿司餐厅

    传送门 题解 这几道都是上周llj讲的题,题解也写得十分好了,所以直接贴了几个链接和代码. //Achen #include<algorithm> #include<iostream ...

  8. 洛谷P3745 [六省联考2017]期末考试

    传送门 题解 //Achen #include<algorithm> #include<iostream> #include<cstring> #include&l ...

  9. 洛谷 P3750 [六省联考2017]分手是祝愿

    传送门 题解 //Achen #include<algorithm> #include<iostream> #include<cstring> #include&l ...

随机推荐

  1. 6_3.springboot2.x数据整合Mybatis(注解和非注解)

    1.配置文件 pom.xml 导入mybatis提供的启动器 <dependency> <groupId>org.mybatis.spring.boot</groupId ...

  2. ERROR 1839 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON

    从cdb上dump一个库结构,准备与本地结构做对比(可以直接compare,但速度贼慢).使用dump脚本在本地创建的时候报错 -- 导出指定库的结构 shell> mysqldump -hxx ...

  3. USACO 2003 Fall Orange Cow Exhibition /// 负数01背包 oj22829

    题目大意: 输入n 接下来n行 每行输入 a b 输出n行中 a+b总和最大的同时满足 所有a总和>=0所有b总和>=0的值 负数的01背包应该反过来 w[i]为正数时 需要从大往小推 即 ...

  4. 金融IT的算法要求

    岗位职责 1.负责宏观经济预测的算法研究 2.负责债券.股票.基金等品种的模型研究 3.负责持仓收益分析,及绩效归因等模型研究 任职要求 1.一般数学: 线性代数与矩阵运算 随机过程 微积分 概率论 ...

  5. 配置vue项目的自定义config.js

    [1]不采用脚手架的config文件夹中的配置文件 [2]在static文件夹下,自定义一个congfig.js文件 // 配置开发环境下服务器地址 window.Glod = { pmsApiUrl ...

  6. 2019-8-31-PowerShell-通过-WMI-获取系统安装软件

    title author date CreateTime categories PowerShell 通过 WMI 获取系统安装软件 lindexi 2019-08-31 16:55:58 +0800 ...

  7. Gabor filter for image processing and computer vision

    介绍 我们已经知道,傅里叶变换是一种信号处理中的有力工具,可以帮助我们将图像从空域转换到频域,并提取到空域上不易提取的特征.但是经过傅里叶变换后,图像在不同位置的频度特征往往混合在一起,但是Gabor ...

  8. mysql主从跳过错误

    mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续 跳过错误有两种方式: 1.跳过指定数量的事务 mysql>stop slave;  m ...

  9. 异常处理记录: Unable to compile class for JSP

    出错信息截图: 经过搜索引擎的帮助, 发现这些引发异常的可能原因: 1. tomcat的版本必须大于等于JDK的版本 2. maven中的jar与tomcat中jar冲突 看看pom.xml, 果然j ...

  10. 从微服务治理的角度看RSocket、. Envoy和. Istio

    很多同学看到这个题目,一定会提这样的问题:RSocket是个协议,Envoy是一个 proxy,Istio是service mesh control plane + data plane. 这三种技术 ...