A Story of One Country (Hard)(中途相遇法/启发式分裂)

A Story of One Country (Hard)

https://www.luogu.com.cn/problem/solution/CF1181E2

首先考虑暴力的做法,就是每次排序然后寻找分割点,对分割点左右两边分治处理,但是这样的复杂度是 最坏情况下 O ( n 2 l o g n ) O(n^2logn) O(n2logn)

然后我们考虑优化这个算法,首先我们不能每次排序,可以用一个set维护,然后每次只需要分裂set即可,利用启发式分裂最坏情况下就是从中间分裂,这样就会有O(nlogn)次插入删除。

但是另外一个问题就是如何寻找关键点,我们可以使用一个中途相遇法来处理,我们不能将整个set都扫一遍,但是我们可以从两边一起移动,这样最坏情况下还是从中间分开,那么只需要O(n)次扫描。

所以这道题我们需要维护4个set,分别对应矩形的上下左右,然后每次同时移动这4个指针,然后遇到分割点就进行分治。

细节:

  1. set可以自定义比较函数,但是要写成一个结构体的形式
  2. set中不能有重复元素,所以需要以id为第二关键字,就不会重复了
  3. set构造可以通过直接给出首指针和尾指针
  4. set清空erase也可以通过首指针和尾指针
  5. 具体寻找分割点,需要按l排序然后维护r的最大值这样的方法
posted @ 2021-01-21 09:49  dinlon  阅读(117)  评论(0)    收藏  举报