4869: [shoi2017]相逢是問候
time limit: 40 sec memory limit: 512 mb
submit: 440 solved: 124
[submit][status][discuss]
description
informatikverbindetdichundmich.
資訊將你我鏈結。b君希望以維護乙個長度為n的陣列,這個陣列的下標為從1到n的正整數。一共有m個操作,可以
分為兩種:0 l r表示將第l個到第r個數(al,al+1,…,ar)中的每乙個數ai替換為c^ai,即c的ai次方,其中c是
輸入的乙個常數,也就是執行賦值ai=c^ai1 l r求第l個到第r個數的和,也就是輸出:sigma(ai),l<=i<=rai因為
這個結果可能會很大,所以你只需要輸出結果mod p的值即可。
input
第一行有三個整數n,m,p,c,所有整數含義見問題描述。
接下來一行n個整數,表示a陣列的初始值。
接下來m行,每行三個整數,其中第乙個整數表示了操作的型別。
如果是0的話,表示這是乙個修改操作,操作的引數為l,r。
如果是1的話,表示這是乙個詢問操作,操作的引數為l,r。 1≤
n≤50000,1
≤m≤50000,1
≤p≤100000000,0
<
c0≤ai
output
對於每個詢問操作,輸出一行,包括乙個整數表示答案mod p的值。
sample input
4 4 7 2
1 2 3 4
0 1 4
1 2 4
0 1 4
1 1 3
sample output
0 3
hint
鳴謝多名網友提供正確資料,已重測!
source
拿出求冪**的式子大討論一發 camodp
=cam
odϕ(
p)+ϕ
(p)m
odp cc
amod
p=cc
amod
ϕ(ϕ(
p))+
ϕ(ϕ(
p))m
odϕ(
p)+ϕ
(p)m
odp
後續展開類似……
………
注意到對於任意的
p ,不斷令p=
ϕ(p)
,期望log
次以後就有p=
1
因此對於任意位置的數,當修改操作達到一定程度時,再修改也不會改變這個數的值了
注意這個存
ϕ 的陣列需要多放乙個
1
因為要多展開一層讓最上面的冪次為ca
mod1
之後才達到定值
理論複雜度為o(
nlog
nlog
2p) 級別的實際顯然遠沒有這麼糟糕
求冪**注意判斷不用再加
ϕ 的情形
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 5e4 + 5;
typedef
long
long ll;
int n,m,p,c,tot,a[maxn],b[maxn],c[maxn];
ll sum[maxn],s[maxn];
set st;
stack
stk;
set :: iterator it;
inline
int ksm(ll x,int y,ll mod,bool &bo)
bo |= ((x *= x) >= mod);
x %= mod;
}return ret;
}inline
void modify(int k)
int now = c[k] == 1 ? a[k] : ksm(c,a[k],s[c[k]],bo);
if (bo) now += s[c[k]];
for (int i = c[k] - 1; i > 1; i--)
now = ksm(c,now,p,bo); delta += now; b[k] = now;
for (int i = k; i <= n; i += i&-i) sum[i] += delta;
}inline
void find(int x)
if (x > 1) phi *= (x - 1); find(phi);
}inline
int getint()
int main()
st.insert(n + 1);
while (m--)
else
}return
0;}
BZOJ4869 Shoi2017 相逢是問候
維護乙個長度為n的陣列,m個操作,支援兩種操作 0 l r表示將第l個到第r個數中的每乙個數ai替換為c ai 1 l r求第l個到第r個數的和。首先要知道擴充套件尤拉定理 如果a ph i p ca c am odph i p ph i p modp a phi p c equiv c mod p...
bzoj4869 Shoi2017 相逢是問候
time limit 40 sec memory limit 512 mb submit 1311 solved 470 submit status discuss informatikverbindetdichundmich.資訊將你我鏈結。b君希望以維護乙個長度為n的陣列,這個陣列的下標為從1到...
SHOI 2017 相逢是問候
loj 2142 相逢是問候 首先 這道題目很輕易地就能想到用線段樹求和 但是題目的難點在於 ca imodp caimod pmodp 解決這個問題的公式是 ab abmod p b ai p modp 根據這個公式逆推一下 ca imodp caimod p ai p p modp 以下簡寫 b...