How To Find the minimum value of the expression below:

SUM(|x - A[i]|*B[i]), i >= 0 and i < N, B[i] > 0

When B[i] = 1 I know the answer is given by x = Median(A).How to calculate x when B itself varies.

Before contest

Codeforces Round #647 (Div. 1) - Thanks, Algo Muse!

24:41:41

Register now »

Codeforces Round #647 (Div. 1) - Thanks, Algo Muse!

24:41:41

Register now »

*has extra registration

Before contest

Codeforces Round #647 (Div. 2) - Thanks, Algo Muse!

24:41:41

Register now »

Codeforces Round #647 (Div. 2) - Thanks, Algo Muse!

24:41:41

Register now »

*has extra registration

# | User | Rating |
---|---|---|

1 | MiFaFaOvO | 3681 |

2 | Um_nik | 3544 |

3 | maroonrk | 3431 |

4 | tourist | 3409 |

5 | apiadu | 3397 |

6 | 300iq | 3317 |

7 | ecnerwala | 3260 |

7 | Benq | 3260 |

9 | LHiC | 3229 |

10 | TLE | 3223 |

# | User | Contrib. |
---|---|---|

1 | Errichto | 193 |

2 | antontrygubO_o | 191 |

3 | vovuh | 178 |

4 | pikmike | 177 |

5 | tourist | 166 |

6 | Um_nik | 165 |

7 | McDic | 164 |

8 | ko_osaga | 163 |

9 | Radewoosh | 161 |

10 | Geothermal | 158 |

How To Find the minimum value of the expression below:

SUM(|x - A[i]|*B[i]), i >= 0 and i < N, B[i] > 0

When B[i] = 1 I know the answer is given by x = Median(A).How to calculate x when B itself varies.

↑

↓

Codeforces (c) Copyright 2010-2020 Mike Mirzayanov

The only programming contests Web 2.0 platform

Server time: Jun/03/2020 16:53:20 (g1).

Desktop version, switch to mobile version.

Supported by

User lists

Name |
---|

Another way to think about this is to imagine you have a new array $$$A'$$$ such that it has element $$$A_i$$$ repeated $$$B_i$$$ times in it. Now it is easy to see that the answer to your problem for $$$A'$$$ and $$$B'_i = 1$$$ will be the same as the one for $$$(A, B)$$$. This means that we can simply find the median of $$$A'$$$.

To do this fast, we sort the pairs $$$(A_i, B_i)$$$ by $$$A$$$, then we find the sum of all $$$B_i$$$ and go from the beginning while the prefix sum of $$$2 * B_i < SumB$$$. The last $$$A$$$ we have went through will be our answer.

Thanks for the explanation :)

Can anybody prove the median thing if B[i] = 1?

The function $$$f(x) = \sum_{i = 1}^{n} |x - a_i| $$$ is a piecwise linear function, meaning that it can be broken into straight lines, and changes slope at breakpoints $$$a_i$$$'s, which confirms that minimum is achieved at one of $$$a_i$$$'s. Now as you move from $$$-\infty$$$ to $$$+\infty$$$ slope changes from $$$-n$$$ to $$$n$$$, and is $$$0$$$ at median (when exactly half terms contribute +1 to slope and other half -1)

How can you assume the slope changes from -n to n? A[i] values can be anything

Ok thanks