ABC351F

wscqwq發表於2024-05-01

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