Luogu P2801 教主的魔法

发布时间 2023-08-19 02:07:20作者: 今添

在洛谷中查看


\(1\) 思路:


\(1.0\) 我们考虑使用分块做,但查询操作也不能预处理啊,\(c\) 可是 \(10^9\) 级别的。


\(1.1\) 那么让我们来学习一下分块的找 大于/小于 \(c\) 的元素的个数的方法:

我们需要保证每次每个块内都是有序的,目的是为了查询时倍增或二分。
那么,一开始,我们先将每个块内排序(仅仅是每个块内,不是整体)。

然后看操作:

  1. 修改操作:将 \([ l , r ]\) 内的元素值都增加 \(w\)
    \(\quad\) 对于整块:打上懒标记。
    \(\quad\) 对于散块:暴力修改,但要注意的是,我们已经排完序了,所以需要记录一下位置
    总时间复杂度:\(O(3Q \sqrt{n})\),即 \(O(9 \times 10^6)\)

  1. 查询操作: