因为一些众所周知的原因,不放代码。
分享一种考场思路:
\(a \le 10^7\), 顺序查找肯定会废,所以可以用一种类似埃氏筛的方法将所有满足条件的数标记一下,并将其加入一个答案数组 \(a\) 当中。然后每次查询只需要用lower_bound
函数二分查找一下,假如找到了第 \(i\) 个:
\(a_i = x\), 直接输出;
否则,比较 \(\mid a_{i - 1} - x \mid\) 和 \(\mid a_i - x \mid\),看看那个差值小输出。
最后算一下时间复杂度:预处理部分比埃氏筛快,查找部分二分时间复杂度最坏 \(O(N \log m)\),其中 \(m\) 就是查找出来的满足条件数数组大小,经计算,\(m\) 最坏是 \(500\) 左右,乘 \(N\) 显然是因为有 \(N\) 次查询,最后是 \(O(a \log \log a + N \log m)\) 不到,不会 TLE。
标签:log,题解,复杂度,mid,查找,B3929,GESP202312 From: https://www.cnblogs.com/leo2011/p/17993589