Блог пользователя time_heals_nothing

Автор time_heals_nothing, история, 5 лет назад, По-английски

I have $$$n$$$ lines in the form: $$$y_i=a_i x+b_i$$$, where $$$1\leq n \leq 10^6$$$ and $$$-10^9 \leq a, b \leq 10^9$$$. I need to know how many different lines has the maximum value at some $$$x$$$ (possible $$$x=0$$$).

For example:

$$$y_1 = 3x+20$$$
$$$y_2 = 2x+20$$$
$$$y_3 = 20x+19$$$

At $$$x=0$$$, the lines $$$y_1$$$ and $$$y_2$$$ has the maximum value ($$$20$$$) for that $$$x$$$, but in $$$x=1$$$ just the line $$$y_3$$$ has the maximum value ($$$39$$$), so the answer is 3, because all of them has the maximum value for some $$$x$$$. How can I implement that?

Thanks in advance

  • Проголосовать: нравится
  • -8
  • Проголосовать: не нравится

»
5 лет назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится

There is such thing as Convex Hull Trick (read about here https://codeforces.me/blog/entry/63823 for example). So you need just build it. 1. Sort lines by a 2. If two lines have same a, remove one with least b. 3. And do same things with stack as in tutorial.