F - Double Sum
題意簡述
Just it.
思路1
發現很像求正序對,但是需要具體數字計算。
只考慮 \(A_j-A_i>0\),那麼我們把 \(A_j,-A_i\) 分開計算。
考慮 \(A_j\) 被計算的清形,其實就是以它結尾的正序對個數。
考慮 \(-A_i\) 被計算的清形,其實就是以它開頭的正序對個數,翻轉序列,轉化為以它結尾的逆序對個數。
離散化+樹狀陣列經典做法,複雜度 \(O(n\log n)\)。
https://atcoder.jp/contests/abc351/submissions/52981274
思路2
其實就是求每個數 \(x\) 後面比它大的數的總和 \(sum\) 與個數 \(cnt\)(\(sum-xcnt\))。
考慮倒著插入,然後 fhq-treap 每個節點維護權值和與 size。
查的時候直接分裂出一個 \(>x\) 的就可以了。
複雜度 \(O(n\log n)\),常數比樹狀陣列大得多。
還是這個思路,也可以用樹狀陣列,一個只統計個數,一個統計權值和,和思路1的效率差不多。
平衡樹:https://atcoder.jp/contests/abc351/submissions/52879648
樹狀陣列:https://atcoder.jp/contests/abc351/submissions/52981600