题目:
定义 ans(i,j)=max{vi,vj}×|xi−xj|,求
∑1≤i<j≤nans(i,j)
1≤n≤2×104
题解:
首先按照 v 排序对吧(升序)。
考虑如何解决 pos。
假设目前需要知道区间的第 x 头牛(第 x 头牛在左边,且右边有 k 头牛)的 ans=k∑i=1max{vi,vx}×|xi−xx|,设有 y 头在右边的牛的 pos 值小于等于 posi。
令 pj=j∑i=1vj,qj=j∑i=1vi×posi,则
k∑i=1max{vi,vx}×|posi−posx|=k∑i=1vi×|posi−posx|=(y∑i=1vi×(posx−posi))+(k∑i=y+1vi×(posi−posx))=posx×((y∑i=1vi)−(k∑i=y+1vi))+((k∑i=y+1vi×posi)−(y∑i=1vi×posi))=posx×((2y∑i=1vi)−(k∑i=1vi))+((k∑i=1vi×posi)−(2y∑i=1vi×posi))=posx×(2py−pk)+(qk−2qy)
然后发现把 pos 排序就做完了。
本文作者:trsins
本文链接:https://www.cnblogs.com/trsins/p/15814806.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步