time_heals_nothing's blog

By time_heals_nothing, history, 5 years ago, In English

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

| Write comment?
»
5 years ago, # |
  Vote: I like it +7 Vote: I do not like it

There is such thing as Convex Hull Trick (read about here https://codeforces.net/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.