7. Codeforces - 474F. Ant colony
>>> 题面:

>>> 题解:
题目要求我们计算出查询区间内被吃掉的蚂蚁的数量。
反过来,我们可以计算没有被吃掉的蚂蚁的数量。
对于没有被吃掉的蚂蚁,它的力量 x 必须是该区间内其他所有蚂蚁的力量的公因数。
我们知道,cd(a, b, c, ...) <= min(a, b, c, ...),这里 cd 代表公因数(common divisor)。
等号并不一定能取到,不过一旦取到了,那么 cd(a, b, c, ...) 一定是 gcd(a, b, c, ...)。
因此,x 必须小于等于区间内所有蚂蚁的力量,也就是说,x 小于等于区间最小值。因此,若 x 存在,则它必定是唯一的,且等于该区间的最小元素值。
同时根据上面的分析,我们知道 x 也是该区间所有元素的最大公因数。
所以,我们可以利用 st 表维护区间 gcd 的值。每次查询时,先通过 st 表找到当前区间的 gcd 值 x,再用二分查找确定当前区间内等于 x 的元素数量 y,用区间长度减去 y,即为当前查询的答案。
>>> 提交记录:

>>> 代码:
