Description
题目链接:Codeforces 914D
给定一个长度为 $n$ 的数列 $a_i$ 和 $q$ 次操作,有 $2$ 种操作:
1 l r x
:询问是否可以改动至多一个数使得下标在 $[l,r]$ 内的数的的 $\gcd$ 为 $x$。如果可以则输出 $\text{YES}$ 否则输出 $\text{NO}$。2 i y
:将 $a_i$ 修改为 $y$。
数据范围:$1\le n\le 5\times 10^5$,$1\le q\le 4\times 10^5$,$1\le a_i\le 10^9$
Solution
这是一道线段树裸题 QAQ
我们只需要直接查询区间内不能整除 $x$ 的数的数量 $cnt$。
- 如果 $cnt>1$,那么不可能通过修改至多 $1$ 个数达到要求。
- 如果 $cnt=1$,那么直接将那个数修改成 $x$ 即可。
- 如果 $cnt=0$,那么任意选择一个数修改成 $x$ 即可。
时间复杂度:$O(n\log^2 n)$
Code
1 |
|