【做题记录】USACO04OPEN MooFest G

  • \(\text{USACO04OPEN MooFest G}\)

    • 算法:cdq 分治

题目:

定义 \(ans(i,j)=\max\{v_i,v_j\}\times |x_i-x_j|\),求

\[\sum\limits_{1\le i< j\le n}ans(i,j) \]

\(1\le n\le2\times 10^4\)

题解:

首先按照 \(v\) 排序对吧(升序)。

考虑如何解决 \(pos\)

假设目前需要知道区间的第 \(x\) 头牛(第 \(x\) 头牛在左边,且右边有 \(k\) 头牛)的 \(ans=\sum\limits_{i=1}^{k}{\max\{v_i,v_x\}\times|x_i-x_x|}\),设有 \(y\) 头在右边的牛的 \(pos\) 值小于等于 \(pos_i\)

\(p_j=\sum\limits_{i=1}^{j}v_j,q_j=\sum\limits_{i=1}^{j}v_i\times pos_i\),则

\(\begin{aligned}\sum\limits_{i=1}^{k}{\max\{v_i,v_x\}\times|pos_i-pos_x|} & = \sum\limits_{i=1}^{k}v_i\times|pos_i-pos_x| \\ & = (\sum\limits_{i=1}^{y}v_i\times(pos_x-pos_i))+(\sum\limits_{i=y+1}^{k}v_i\times(pos_i-pos_x))\\ & = pos_x\times((\sum\limits_{i=1}^{y}v_i)-(\sum\limits_{i=y+1}^{k}v_i))+((\sum\limits_{i=y+1}^{k}v_i\times pos_i)-(\sum\limits_{i=1}^{y}v_i\times pos_i))\\ & = pos_x\times((2\sum\limits_{i=1}^{y}v_i)-(\sum\limits_{i=1}^{k}v_i))+((\sum\limits_{i=1}^{k}v_i\times pos_i)-(2\sum\limits_{i=1}^{y}v_i\times pos_i))\\ & = pos_x\times(2p_y-p_k)+(q_k-2q_y)\end{aligned}\)

然后发现把 \(pos\) 排序就做完了。

posted @ 2022-01-17 18:37  trsins  阅读(141)  评论(0)    收藏  举报