20250302 总结
20250302 总结
A
简化题意:对一个长度为 \(n\) 的序列 \(a\) 支持区间加与查询区间 gcd 操作。
思路:首先老师给了个结论,对于 \(a\) 的一个子序列 \(a_l\sim a_r\),有:
我们把后式进行如下拆分:
发现 \(\gcd (a_l,a_{l+1}-a_l,a_{l+2}-a_{l+1},\cdots,a_r-a_{r-1})\) 只和 \(a\) 的差分序列有关。设 \(b\) 为 \(a\) 的差分序列,即 \(b_i=a_i-a_{i-1}\)(默认 \(a_0\) 为 \(0\)),则每次对 \(a_l\sim a_r\) 加 \(d\) 的操作,只会影响 \(b_l\) 和 \(b_{r+1}\) 的值,即 \(b_l\gets b_l+d,b_{r+1}\gets b_{r+1}-d\),查询时即求 \(\gcd (b_{l+1},b_{l+2},\cdots,b_r)\)。这一部分可用线段树维护,复杂度 \(\Omicron (n\log_2 n)\)。
剩下的 \(a_l\) 怎么求?显然 \(\sum\limits_{i=1}^{l}b_i=\sum\limits_{i=1}^{l}a_i-a_{i-1}=a_l\)。我与上一部分分开用树状数组维护的,时间复杂度亦为 \(\Omicron (n\log_2 n)\)。
细节及难点:没什么难点,注意我们对于修改 \(a_l\sim a_r\) 的操作实际修改了 \(b_l,b_{r+1}\),如果没判 \(r+1\le n\) 的话建树时需要建到 \(n+1\)。
B
简化题意:
思路:
细节及难点:
核心代码:
C
简化题意:
思路:
细节及难点:
D
简化题意:
思路:
细节及难点:
E
简化题意:
思路:
细节及难点:
F
简化题意:
思路:
细节及难点:
G
简化题意:
思路:
细节及难点:

浙公网安备 33010602011771号