SHOI 2017 相逢是問候

2021-08-14 16:17:56 字數 2704 閱讀 1910

loj 2142 相逢是問候

首先 這道題目很輕易地就能想到用線段樹求和

但是題目的難點在於 ca

imodp≠

caimod

pmodp

解決這個問題的公式是 ab

≡abmodϕ(

p)+[

b>=ai

]ϕ(p

)modp

根據這個公式逆推一下 ca

imodp=

caimodϕ(

p)+[

ai>ϕ(

p)]ϕ

(p)modp

(以下簡寫

bmodϕ(

p)+[

b>=ai

]ϕ(p

) 為

bmodϕ(

p) c

caimodp=

ccai

modϕ(p

)modp=

ccai

modϕ(ϕ

(p))

modϕ(p

)modp

然後這麼一路推下去 我們會發現 當ϕ.

..ϕ(

p)=1

時 整個數字的值都不會變

(大概意思是 算了這麼多次之後 就不算了)

並且根據網上其它大神的證明 這樣的次數不會大於

logp

所以說暴力修改每乙個點的值 然後線段樹求和

時間複雜度(不嚴格) o(

nlog2p

loga)

(最多修改

n 個點 每個點最多

logp

次修改 每次修改最多進行

logp次計

算 快速冪

loga

)我們不能滿足於這種有可能會t的時間複雜度

於是強行將

loga

壓到常數的超速冪就出現了

我們發現 所有的快速冪的底數都是

c 模數都是ϕ(

p)ϕ(

ϕ(p)

) …

於是我們就對底數為c 模數為ϕ(

p) ϕ

(ϕ(p

))…的(1

−ai)

次方項進行預處理 ai

最大是1e

8 大概是227

所以說 我們拆分i=

a∗214

+b其中a=

imod214

因為有 ci

=ca∗

214+b

=ca∗

214∗c

b 所以我們就分部求出a∈

[0,2

14−1]

,b∈[

0,214

−1] 對應的mo

d=ϕ(

p)、ϕ

(ϕ(p

))..

. 的c 的快速冪值

然後每次求冪時 將 指數 拆分成i=

a∗214

+b然後取出 a、

b 的值乘一下即可

算一下吧 ϕ(

p) ϕ

(ϕ(p

))…最多有

logp

個 214

=16384

預處理的複雜度大概是百萬級別的 相比於原來的複雜度可以說時非常小了

並且原先的複雜度降至了o(

nlog2p

) 跑出來感覺非常快

#include 

#include

#define mid (l+r>>1)

using namespace std;

inline int input()

int n,c,mod,a[50123];

int cnt=0,phi[50];

int num[30][20000][2];

bool mark[30][20000][2];

int gphi(int

x) if(x>1)ans=ans-ans/x;

return ans;

}int ksm(int a,int b,int md,bool &mk)

return ans;

}int fsq(int p,int t,bool &mk)

int sq(int

x,int t)

return

x%mod;

}int l,r;

long long v[400123],done[400123];

void build(int o,int l,int r)

int ls=o<<1,rs=o<<1|1;

build(ls,l,mid);build(rs,mid+1,r);

v[o]=(v[ls]+v[rs])%mod;

done[o]=0;

}void ch(int o,int l,int r)

int ls=o<<1,rs=o<<1|1;

if(l<=mid&&l<=r)ch(ls,l,mid);

if(l<=r&&mid1,r);

v[o]=(v[ls]+v[rs])%mod;

done[o]=min(done[ls],done[rs]);

}int sum(int o,int l,int r)

void cinit()

}}int main()

}

Shoi2017 相逢是問候

傳送門 這種 暴力線段樹 可以考慮一下是不是有什麼特殊性質。對於這道題什麼要知道 可能這裡寫得比較清楚 摘自 感覺就是乙個迭代的過程。而乙個數在操作k次之後就可以不用再操作了。然後使用尤拉定理的時候要特判一下 x phi時,最後要加乙個phi 小於則不加。預處理出所有的phi,記得最後乙個phi為1...

4869 Shoi2017 相逢是問候

4869 shoi2017 相逢是問候 time limit 40 sec memory limit 512 mb submit 440 solved 124 submit status discuss description informatikverbindetdichundmich.資訊將你我...

六省聯考2017 相逢是問候

題意 給定乙個長度為n的序列a,常數p和c。你需要支援m次操作,分為兩種 n,m leq 50000,c題解 一般像這種看起來根本沒法維護的線段樹題都是操作幾次就變常數了,於是我們考慮一下這個操作的性質。首先引入拓展尤拉定理 a mod p begina b 注意到 phi p 在 k 30 左右的...