UOJ Round #31 A 决战库尔斯克
题目意思很简单,但是取模这个条件限制是很强的,一般我能想到的就是分组或者根号分治,这里显然考虑前者。
考虑按照什么分组,比较简单的,我们可以将数组从大到小排序,此时将所有 \(a_i > \frac{a_1}{2}\) 的分成一组,剩下的分成一组,那么显然第一组内的答案是极差,第二组内的答案可以递归算,显然最多只会递归 \(O(\log V)\) 层,现在我们考虑两组之间的贡献。
考虑令第一组为 \(s\), 第二组 \(t\),假如我们枚举 \(t_i\),考虑它有贡献的必要条件是 \(t_i > ans\)。此时仍然注意不到一些有用的性质,我们不妨从分组的性质入手,研究一下这个 \(ans\) 的性质。
此时 \(ans\) 最劣为 \(s\) 的极差,也就是 \(ans < \frac{s_{\max}}{2}\),此时 \(ans = s_{\max} - s_{\min}\),我们设 \(s_{\max} = xt_i + y(y < t_i), s_{\min} = pt_i + q(q < t_i)\),此时满足 \((x - p)t_i + y - q = ans\),又因为 \(t_i > ans\),所以 \((x - p)t_i + y - q < t_i\),注意到 \(|y - q| < t_i\),该式子仅考虑整数,所以将其化为 \((x - p)t_i < 2t_i\),此时 \(t_i > 0\),所以 \(x - p < 2\),也就是说,\(x\) 与 \(p\) 差值最多是 \(1\)。仔细思考这意味着什么,意味着 \(s\) 中的数对 \(t_i\) 的商最多只有两个不同的数,对于相同的商,我们可以二分寻求答案的最大值,这样就简单的做完了。
分析一下复杂度,最劣大概是 \(O(n \log n \log V)\) 的,不过写写就知道远远达不到这个上界,这个题比较关键的还是发现最多只有两个不同商的性质,以及第一步的分组是极为关键的。

浙公网安备 33010602011771号