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\) 列舉的規模。