CF992E 题解

先说暴力。线段树维护 \(a_i - s_{i - 1}\),每次暴力 \(O(n \log n)\) 查找 \(0\) 的位置。

这会超时,考虑加个优化:

  • 维护一个区间 max,在查询到的区间的 max 小于 \(0\) 时退出。
  • \(p\) 为修改的位置,\(x\) 为修改成的值。在修改时把区间 \([p, p]\)\(x - a_i\),把区间 \([p + 1, n]\)\(a_i - x\) 即可。注意 \(p = n\) 时会越界。

这时你把优化后的代码交上去,发现它过了。为什么?

因为实际上满足条件的位置只有 \(O(\log n)\) 个。若个数大于 \(O(\log n)\),每个满足条件的位置都会翻倍,则满足不了 \(1 \le p_i \le n\) 的值域。故此时查询到的叶子最多只有 \(O(\log n)\) 个,可以通过。

AC 记录

posted @ 2025-08-02 16:13  David9006  阅读(7)  评论(0)    收藏  举报