2025杭电多校第十场Cut Check Bit、Multiple and Factor题解如何获取?

摘要:Multiple and Factor 根号分治 #数学 题目 思路 本题采用根号分治的思想,令(B=sqrt{ n }),将下标分为(1leq ileq B)与(B<ileq n)两类数进行维护
Multiple and Factor 根号分治 #数学 题目 思路 本题采用根号分治的思想,令\(B=\sqrt{ n }\),将下标分为\(1\leq i\leq B\)与\(B<i\leq n\)两类数进行维护 数组\(a[N]\)用于储存初始权值 操作一:令\(x\)的所有倍数位置\(+k\) 若\(x\leq B\): 创建数组\(add[B]\),作为小数倍数和的加法懒标记 直接 \(add[x]+=k\)即可 时间复杂度\(o(1)\) 若\(x>B\): 可知此时的\(x\)的倍数个数不会超过\(B\)个,因此可以暴力解决 枚举\(x\)的所有倍数\(tx\),\(a[tx]+=k\) 时间复杂度\(o(B)\) 操作二:令\(x\)的所有因数位置\(+k\) 直接枚举\(x\)的所有因数\(d\) \(a[d]+=k\ [\ d\ |\ x\ ]\) 时间复杂度\(o(\sqrt{ n })\) 操作三:查询\(x\)的所有倍数位置的权值和 若\(x>B\): 先暴力枚举\(x\)的所有倍数\(tx\),\(ans+=a[tx]\) 接下来需要处理\(1\leq i\leq B\)部分的加法懒标记: 设集合\(S_{i}=\{ j\ |\ j=t\times i\ ,\ j\leq n\ ,\ t\geq 1 \}\),表示所有小于\(n\)的\(i\)的倍数集合 可知\(S_{i}\cap S_{x}=S_{lcm(x,i)}\) \(add[i]\)对答案的贡献即\(add[i]\times S_{lcm(x,i)}.size\) 而\(S_{j}.size=\left\lfloor \frac{n}{j} \right\rfloor\) 因此\(ans+=add[i]\times \left\lfloor \frac{n}{lcm(x,i)} \right\rfloor\) 时间复杂度\(o(B+B\log n)\),\(\log n\)来自\(lcm(x,i)\) 若\(x\leq B\): 这些数不好用懒标记维护,所以直接每次修改都暴力维护 创建数组\(addmul[B]\),用于直接储存操作三小数询问的答案 进行操作一时:(令\(x\)的所有倍数位置\(+k\)) 考虑直接更新\(1\leq i\leq B\)的\(addmul[i]\) 同样考虑\(S_{i}\)与\(S_{x}\)两个集合,可得\(addmul[i]+=k\times\left\lfloor \frac{n}{lcm(x,i)} \right\rfloor\) 时间复杂度\(o(B\log n)\) 进行操作二时:(令\(x\)的所有因数位置\(+k\)) 考虑直接更新\(1\leq i\leq B\)的\(addmul[i]\) 首先\(i\)必须是\(x\)的因数才会被更新到,即\(i\ |\ x\) 设\(t\times i=x\),若\(d\ |\ t\),则\((d\times i)\ |\ x\),因此\(d\)的数量即为又是\(i\)的倍数又是\(x\)的因数的个数 创建数组\(d[B]\),\(d[i]\)表示数字\(i\)的因数个数,求\(d\ |\ t\)的个数即\(d[t]=d\left[ \frac{x}{i} \right]\) 因此\(addmul[i]+=k\times d\left[ \frac{x}{i} \right]\) 时间复杂度\(o(B)\) 操作四:查询\(x\)的所有因数位置的权值和 先暴力枚举\(x\)的所有因数\(d\),\(ans+=a[d]\) 接下来处理小数部分的加法懒标记: 对于\(1\leq i\leq B\)且\(i\ |\ x\),同样也是考虑“又是\(i\)的倍数又是\(x\)的因数的个数” 因此\(ans+=d\left[ \frac{x}{i} \right]\times add[i]\) 时间复杂度\(o(\sqrt{ n }+B)\) 对于数组\(d[B]\),可以通过类似欧拉筛的方法预处理: 枚举\(1\leq i\leq n\),对于每个\(i\)再枚举\(k\times i\leq n\),\(d[k\times i]++\) 对于每个确定的\(i\),将会枚举\(\left\lfloor \frac{n}{i} \right\rfloor\)个\(k\),因此总枚举次数为\(\sum_{i=1}^n\left\lfloor \frac{n}{i} \right\rfloor\) 复杂度为\(o\left( \sum_{i=1
阅读全文