Nephren Tree

因为 Chtholly Tree 并不是树,所以 Nephren Tree 也不是树,更像是一种 trick。

引入

给定一个长为 \(n\) 的序列,\(m\) 次操作:

  • 操作 1:给定 \(l\) \(r\),将 \([l,r]\) 的所有数加 \(k\)
  • 操作 2:给定 \(l\) \(r\) \(p\),询问 \(f(l,r) \bmod p\),其中:

    \[f(l,r)=\left\{ \begin{matrix} a_l^{f(l+1,r)} & l<r \\ a_l & l=r\end{matrix} \right. \]

\(n\leq 10^5\)\(m\leq 10^5\)\(p\leq2\times 10^7\)

解法

先考虑没有修改怎么做。

首先有扩展欧拉定理:

\[a^b \bmod p \equiv \left\{ \begin{matrix} a^{b\bmod \varphi(p)} & b<\varphi(p) \\ a^{b\bmod \varphi(p)+\varphi(p)} & b\geq\varphi(p)\end{matrix} \right. \]

也就是说我们可以构造函数 \(g(l,r,p)\) 计算 \(f(l,r) \bmod p\)

\[g(l,r,p)=\left\{ \begin{matrix} a_l^{g(l+1,r,\varphi(p))}\bmod p & l<r\wedge g(l+1,r,\varphi(p)) < \varphi(p)\\ a_l^{g(l+1,r,\varphi(p))+\varphi (p)}\bmod p & l<r\wedge g(l+1,r,\varphi(p)) \geq \varphi(p)\\ a_l\bmod p & l=r\end{matrix} \right. \]

我们发现 \(\varphi(p)\)\(p\neq 2\) 时是偶数,而 \(\varphi(p)\leq \frac p2\)\(p\) 是偶数时成立。

所以每进行一次 \(p\leftarrow \varphi(p)\) 的操作至少使 \(p\) 减少一半,故单次查询执行 \(p\leftarrow \varphi(p)\) 的操作的一个上界是 \(O(\log p)\)

继续研究发现有修改问题不大,该用数据结构就用。

时间复杂度 \(O(p+q\log^2 p)\),空间复杂度 \(O(p)\),瓶颈在于快速求幂。

小结

容易发现 Nehpren Tree 对修改操作的要求仅仅是在线,也就是说 Nehpren Tree 支持区间异或等奇奇怪怪的操作,但是在 \(p>2\times 10^7\) 的 case 中由于无法快速求 \(\varphi(p)\) 使得时间复杂度变为 \(O(q(k\log p+\log^2 p+\sqrt p))\)\(O(q(k\log p+\log^2 p+p^{\frac 14}))\),其中 \(k\) 是数据结构的查询复杂度。

posted @ 2025-03-11 20:32  JoeyJiang  阅读(13)  评论(0)    收藏  举报