uniの競プロlog

適当に書いていきます

ABC351 F - Double sum

問題リンク
F - Double Sum

解法

問題の式を次のように変形する。

\displaystyle{
\sum_{i=1}^N\sum_{j=i+1}^N\max(A_j-A_i, 0)=\sum_{i=1}^N\sum_{j=i+1}^N \{\max(A_j,A_i)-A_i\}
}


したがって、

iに対し,  i < jかつ A_i < A_j をみたすjについて, (A_jの総和) - (jの個数) × A_i

を求め、その総和を取ればよいことが分かる。

これはiNから1の順に考えると、

  • A_iより大きい要素の総和を管理するsegment tree
  • A_iより大きい要素の個数を管理するsegment tree

の2本のsegment tree(どちらも一点加算区間総和)を使えば良いので、計算量はO(N\log N)
座標圧縮が必要なので注意。