P10403 题解

前言

怎么全是神秘二分?双指针不好吗?
传送门

思路

容易想到维护区间 $\gcd$ 使用 st 表,$O(n\log^2_n)$ 预处理,$O(n\log_n)$ 查询。
直接暴力查询每个区间 $O(n^2\log_n)$ 过不了一点。
看见了有人使用二分,但是考虑直接双指针。
单独考虑 $\gcd=2$ 和 $\gcd=3$ 的情况。观察到固定右端点的话,区间 $\gcd$ 随左端点单调递增(固定左端点的话,区间 $\gcd$ 随右端点单调递减)。
那么,固定右端点时,使得 $\gcd=2$ 的左端点也是一段区间。当我们右移右端点时,这段合法区间也要跟着右移($\gcd=3$ 同理)。
那么直接双指针即可。注意判断合法情况,统计答案时也注意区间长度奇偶问题。
时间复杂度 $O(n\log^2_n)$,空间复杂度 $O(n\log_n)$。

Code

Talk is cheap, show me the code.

End

实际上本题时间瓶颈在于 st 表,使用二分与使用双指针并无太明显的差距,不过能写更优就是了(实际上还是慢的一批)。如有问题,欢迎指正。