由题意可得方程 \(\sum\limits_{i=1}^m\frac{w_i}{S}|i-x|=x\),其中 \(x\) 表示答案,\(S = \sum\limits_{i=1}^m w_i\)。
(其实我也不知道是怎么得的)
设 \(F(x) = \sum\limits_{i=1}^m|i-x|\cdot w_i-S\cdot x\),问题即求 \(F\) 的零点。
注意到其中有绝对值,不好直接求。
但是由于 \(i\) 均为整数,故若能求得答案的整数部分即可去绝对值。
又注意到 \(F\) 单调递减,因为当 \(x\) 增大时,前一项增大的量必然不如后一项减小的量。
故可以二分求得最大的使得 \(F(x)\ge0\) 的 \(x\)。
还要动态的话,可以使用线段树维护右端点的 \(F\) 值。
代码:
1 |
|