正解
我们将 f(c,x,y) 记为上式得出的值。
固定 c 与 y 的时候,最优的 x 仅会在 \lfloor \frac{a_i}{c_i} \rfloor 和 \lceil \frac{a_i}{c_i} \rceil 取到,也就是取值个数是 O(n) 个的。这点对于 y 同理。
然后我们放宽要求,不固定 c 与 y。记值域为 V,那么 x 有多少种取值呢?
答案是 O(n \sqrt V),原理类似整除分块,感性理解就是因为是整除,将反比例函数图像画出后向下(或向上)取整后很多值会是相等的,尤其是横坐标越大的时候。
因此我们有这样一个思路:
- 首先整除分块 \max_{i=1}^n \max(a_i,b_i),并将结果存入数组。
- 枚举上面所说的数组作为 x (或者 y),这是 O(n \sqrt V) 的。
- 枚举 i 用 a_i(或 b_i)算出对应的 c_i (c_i=\lfloor \frac{a_i/b_i}{x} \rfloor 或 c_i=\lceil \frac{a_i/b_i}{x} \rceil)(注意 / 是或的意思),从而推出相应的 y (或 x),这是 O(n) 的
- 用上述 (x,y) 算出最优的 c_i ,得出本轮最优答案,这也是 O(n) 的。
- 枚举 i 用 a_i(或 b_i)算出对应的 c_i (c_i=\lfloor \frac{a_i/b_i}{x} \rfloor 或 c_i=\lceil \frac{a_i/b_i}{x} \rceil)(注意 / 是或的意思),从而推出相应的 y (或 x),这是 O(n) 的