1 条题解

  • 0
    @ 2023-1-18 12:48:07

    考虑求出取 lirl\leq i\leq r,对于任意的 lkrl\leq k\leq r,都满足 sisks_i\mid s_kii 的个数,再用 rl+1r-l+1 减去求出的数量即可。

    根据条件,$s_i\mid s_l,\ s_i\mid s_{l+1},\ \cdots,\ s_i\mid s_r$,则 sigcdk=lrsks_i\mid\gcd_{k=l}^rs_k,又因为 sis_i 也在 {sl, sl+1, , sr}\{s_l,\ s_{l+1},\ \cdots,\ s_r\} 中,则 si=gcdk=lrsk=mink=lrsks_i=\gcd_{k=l}^rs_k=\min_{k=l}^rs_k

    使用线段树维护区间最大公因数,以及区间中等于最小值的数的个数,故还需要维护区间最小值。每次询问,判断区间最小值是否等于区间最大公因数,如果等于,设 tt 为区间中等于最小值的数的个数,则答案为 rl+1tr-l+1-t,否则,区间中不存在既为最小值又为最大公因数的数,答案为 rl+1r-l+1

    时间复杂度 Θ(tlogn)\Theta(t\log n)

    • 1

    信息

    ID
    5041
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    1
    已通过
    1
    上传者