CF691F题解

题面

题意:
给你 \(n\) 个数 \(a_{1\sim n}\)\(m\) 次询问,每次给出 \(p\) ,求满足 \(a_i\times a_j\geq p\) 的数对 \((i,j)\) 的对数。
\(1\leq n,m\leq 10^6,1\leq a_i,p\leq 3\times10^6\)


考虑预处理答案。设 \(ans_p\)\(a_i\times a_j\leq p\) 的数对 \(i,j\) 的对数,那么每次询问的答案是 \(n\times(n-1)-ans_{p-1}\)
显然不能 \(O(n^2)\) 去做 \(ans\) 。考虑对于每一个 \(i\) ,枚举 \(a_i\) 的倍数,看他是否可行。这样的话复杂度就是 \(O(n\ln n)\) 了。
开个数组记录一下 \(i\) 这个数是否在数列 \(a\) 中出现过即可。

代码

posted @ 2022-04-17 12:30  1358id  阅读(24)  评论(0编辑  收藏  举报