[XSY] 智慧树(线性同余方程组,线段树/树状数组)
生活随笔
收集整理的這篇文章主要介紹了
[XSY] 智慧树(线性同余方程组,线段树/树状数组)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
智慧樹
- 解決此題有兩個要點:
- 先看第2點:
若一個序列是合法的,則這個序列的所有子序列都是合法的
考慮對?1≤i≤n\forall 1\leq i\leq n?1≤i≤n,求出以iii為左端點時,序列右端點最右能取到哪,記為nxt[i]nxt[i]nxt[i]
若不考慮l,rl,rl,r的限制,所有合法子序列數(shù)=∑i=1n(nxt[i]?i+1)\sum_{i=1}^{n}(nxt[i]-i+1)∑i=1n?(nxt[i]?i+1) - 加入l,rl,rl,r的限制,相當于限制了:
1.序列左端點必須≥l\geq l≥l
2.序列右端點必須≤r\leq r≤r
兩個限制不好同時處理,我們考慮分開處理:
-采用離線做法,把詢問按lll從大到小排序,對每個詢問,只考慮 序列左端點i≥i\geqi≥當前的lll 的序列,這樣便可保證滿足第一個限制。
-對于第二個限制,維護cnt[j]cnt[j]cnt[j]表示 jjj是多少個 當前納入考慮的合法序列 的右端點,則詢問(l,r)(l,r)(l,r)的答案為∑j=lrcnt[j]\sum_{j=l}^{r}cnt[j]∑j=lr?cnt[j]
以上可以用線段樹/樹狀數(shù)組維護(樹狀數(shù)組的區(qū)間修改、區(qū)間查詢戳這里)。 - 再看第1點:
既然不保證mim_imi?為質(zhì)數(shù),那么就不能用CRTCRTCRT,只能用exCRTexCRTexCRT了
考慮方程組:
{x≡b1(modm1)x≡b2(modm2)\begin{cases}x\equiv b_1(\mod m_1) \\x\equiv b_2(\mod m_2)\end{cases}{x≡b1?(modm1?)x≡b2?(modm2?)?
則x=m1k1+b1=m2k2+b2x=m_1k_1+b_1=m_2k_2+b_2x=m1?k1?+b1?=m2?k2?+b2?
∴m1k1?m2k2=b2?b1\therefore m_1k_1-m_2k_2=b_2-b_1∴m1?k1??m2?k2?=b2??b1?
由拓展歐幾里得知,k1,k2k_1,k_2k1?,k2?有解,當且僅當∣b2?b1∣=gcd(m1,m2)|b_2-b_1|=gcd(m_1,m_2)∣b2??b1?∣=gcd(m1?,m2?)
若k1,k2k_1,k_2k1?,k2?有解,我們可以得到一個同時符合兩條方程的xxx值,設為x′x'x′
那么兩個方程可以合并為一個新的方程:
x≡x′(modlcm(m1,m2))x\equiv x'(\mod lcm(m_1,m_2))x≡x′(modlcm(m1?,m2?))
用新方程再去和其它方程合并即可(ps:合并方程求nxtnxtnxt的過程可以用ST表優(yōu)化)
當MMM較大時,由于解的模數(shù)較大,不宜基于求解來維護線性同余方程組。事實上,“求解”浪費了信息,我們只需要知道“是否有解”。
- 先考慮 mim_imi?均為素數(shù) 的特殊情況:
一個方程組無解,當且僅當方程組中存在兩個方程:
x≡bi(modp)x\equiv b_i(\mod p)x≡bi?(modp),x≡bj(modp)x\equiv b_j(\mod p)x≡bj?(modp),且bi!=bjb_i!=b_jbi?!=bj?
為求nxtnxtnxt,我們維護一個由線性同余方程構成的隊列,支持入隊、出隊和查詢這些方程構成的方程組加上一個新方程組是否有解。
而判斷方程組有沒有解,我們只需對每個素數(shù)ppp維護 目前限制xmodpx \mod pxmodp的余數(shù)是什么、對xmodpx \mod pxmodp的余數(shù)的限制有幾個 即可 - 再考慮 mim_imi?為任意正整數(shù) 的情況:
假設mi=∏j=1pjajm_i=\prod_{j=1}p_j^{a_j}mi?=∏j=1?pjaj??(ppp表示素數(shù)),
則方程x≡bi(modmi)x\equiv b_i(\mod m_i)x≡bi?(modmi?)可以分解成:
{x≡bi(modp1a1)x≡bi(modp2a2)x≡bi(modp3a3)...\begin{cases}x\equiv b_i(\mod p_1^{a_1}) \\x\equiv b_i(\mod p_2^{a_2})\\x\equiv b_i(\mod p_3^{a_3})\\...\end{cases}??????????x≡bi?(modp1a1??)x≡bi?(modp2a2??)x≡bi?(modp3a3??)...?
那么一個方程組無解,當且僅當方程組中存在兩個方程:
x≡bi(modpa)x\equiv b_i(\mod p^a)x≡bi?(modpa),x≡bj(modpa)x\equiv b_j(\mod p^a)x≡bj?(modpa),且bi!=bjb_i!=b_jbi?!=bj?
做法類似上面,對每個pap^apa維護 目前限制xmodpax \mod p^axmodpa的余數(shù)是什么、對xmodpax \mod p^axmodpa的余數(shù)的限制有幾個 即可
總結(jié)
以上是生活随笔為你收集整理的[XSY] 智慧树(线性同余方程组,线段树/树状数组)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我电脑上安装的软件不多电脑总是安装一些没
- 下一篇: 如何免费备份照片和视频免费的备份照片视频