【题解】「CF765F」Souvenirs
https://www.luogu.com.cn/problem/CF765F
首先有一个比较 navie 的 \(O(n\sqrt m\log n)\) 的做法(add
和 del
的时候,用两个 multiset 维护一下。
有一个 bitset 的做法来优化用 multiset 查询前驱后继的做法:https://www.luogu.com.cn/article/zcmco6hd
首先考虑离线下来,将询问挂在左端点,从左到右枚举左端点的时候就需要删除贡献。
然后,每次肯定只能区间排序之后相邻两个元素对答案有贡献。
https://www.luogu.com.cn/article/6l487c0y
其实主要步骤是下面这三个。
-
将 \(|a_j-a_i|\Rightarrow a_j-a_i\vee a_i-a_j\),所以只考虑 \(j<i,a_j\ge a_i\) 的答案。
这样去掉了绝对值,才可以有后面用不等式来框定范围的时候,能够被化简。
-
离线,将询问挂在右端点。
这样的话,不再是删贡献,而是加贡献,由于这是取 min,显然比挂在左端点好做的多。
所以,现在只用考虑右端点固定的情况。
-
\(a_{j^{\prime}}-a_{i}<a_{j}-a_{j^{\prime}}\)。
(实际上出发点和我自己那个,排序后相邻两个元素的出发点是一样的:都是为了减小 \(i,j\) 枚举的规模。