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\) 中出现过即可。