[Luogu] P2345 [USACO04OPEN]MooFest G

(Link)

Description

(n)头奶牛,奶牛们的叫声很大,第(i)头和第(j)头奶牛交流,会发出(max{Vi, Vj}×|Xi − Xj |)的音量。假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少。

Solution

看到有(max),就想到先把奶牛按(v_i)排序。

不难发现,对于每个新加入的奶牛,它所产生的贡献为(sum{x_j}(x_j>x_i)-sum{x_j(x_j<x_i)}+v_i*(k1-k2))(k1,k2)表示(x_i)之前有几个(x_j),和(x_i)之后有几个(x_j)

所以维护两个树状数组即可。记得开(long long)

原文地址:https://www.cnblogs.com/andysj/p/13862040.html