4869 Shoi2017 相逢是問候

2021-07-31 12:45:04 字數 2629 閱讀 1599

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

拿出求冪**的式子大討論一發 ca

modp

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