题意
在二维平面有$n$个海盗,$m$个探照灯,你有两种操作
- 将所有海盗往上走一步
- 将所有海盗往右走一步
设海盗为$(a_i,b_i)$,探照灯为$(c_j,d_j)$,当且仅当$a_i\leq c_j$且$b_i\leq d_j$时,海盗在探照灯范围内,问最少多少次操作可以将所有海盗移动到所有探照灯范围外。
分析
将题意抽象一下,找到一个二元组$(x,y)$,$x$表示向上走的步数,$y$表示向右走的步数,然后对于任何海盗$(a_i,b_i)$,都满足加上$(x,y)$后,对于任何探照灯$(c_j,d_j)$要么$a_i+x>c_j$,要么$b_i+y>d_j$,且$x+y$最小。
那么我们$O(nm)$处理,找到海盗和探照灯之间的关系,若海盗在探照灯范围内,得到二元组$(x,y)$,有$a_i+x>c_j$且$b_i+y>d_j$,得到所有二元组后,按照第一维排序。
此时发现,遍历二元组,遍历到第$i$个二元组时,如果取该二元组的$x$,那么$y$最小即为剩余二元组的最大值,这样可以满足前部分探照灯向上走即可脱离,剩余探照灯向右走即可脱离,注意答案初始值是只往右走时的答案。
1 |
|