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

本文介绍了如何优化暴力求解策略,通过启发式分裂和中途相遇法解决A Story of One Country (Hard)问题。具体方法包括使用set避免全量排序,以O(nlogn)复杂度进行分裂,以及利用中途相遇法在O(n)时间内找到关键点。同时维护四个set,分别对应问题的四个方向,并通过调整指针实现分治。注意在set中使用自定义比较函数和避免元素重复的技术细节。
摘要由CSDN通过智能技术生成

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的最大值这样的方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值