CF1879F Last Man Standing 题解
观察题目,容易发现当题目难度为 \(x\) 时一个 OIer 存活时间为 \(h_i \lceil \frac{a_i}{x} \rceil\)
发现 \(a_i\) 较小,所以我们先考虑暴力枚举 \(x \in [1, \max a_i]\) ,然后把原数组按 \(a_i\) 排个序,对于每组 \(\lceil \frac{a_i}{x} \rceil\) 相同的部分统一计算他们最大 And 次大的 \(h_i\) ,然后合并,最终复杂度 \(O(A \sqrt A \log n)\) ,原因是不同的 \(\lceil \frac{a_i}{x} \rceil\) 最多 \(O(\sqrt A)\) 组,而 \(O(\log n)\) 是二分的复杂度
我们发现虽然不同的 \(\lceil \frac{a_i}{x} \rceil\) 最多 \(O(\sqrt A)\) 组,但里面是很容易有很多组是空的,因此我们把 \(a_i\) 当成下标,里面存 \(h_i\) ,然后对于枚举的一个 \(x\) ,问题就变成了求 \(\frac{n}{x}\) 个区间的最大 And 次大值。我们想办法用一个数据结构维护这个东西。没错,st 表!
st 表维护次大值见这个帖子
最终复杂度 \(O(T A \ln A)\)